Mới đây, nhà sáng lập Docker, Solomon Hykes đã công bố ra mắt sản phẩm mới Dagger, Dagger là một nền tảng DevOps mới, mục đích là giải quyết một số vấn đề trong quy trình DevOps cho các nhà phát triển. Hiện tại, Dagger đã nhận được vòng tài trợ 20 triệu $. Vòng tài trợ này do Redpoint Ventures dẫn đầu và cựu CEO GitHub Nat Fireman, cựu CTO của Red Hat Brian Stevens và cựu CEO Reddit Ellan Pao đã tham gia đầu tư.

Dagger giúp các nhà phát triển DevOps viết đường ống CI/CD thành một mô hình khai báo trong ngôn ngữ CUE. Dựa trên điều này, các nhà phát triển có thể mô tả đường ống của họ và kết nối tất cả các liên kết, tất cả đều được triển khai bằng mã thuần túy.
Định nghĩa đường ống sẽ trông thế nào?
ví dụ định nghĩa đường ống:
package todoapp
import (
"dagger.io/dagger"
"dagger.io/dagger/core"
"universe.dagger.io/alpine"
"universe.dagger.io/bash"
"universe.dagger.io/docker"
"universe.dagger.io/netlify"
)
dagger.#Plan & {
_nodeModulesMount: "/src/node_modules": {
dest: "/src/node_modules"
type: "cache"
contents: core.#CacheDir & {
id: "todoapp-modules-cache"
}
}
client: {
filesystem: {
"./": read: {
contents: dagger.#FS
exclude: [
"README.md",
"_build",
"todoapp.cue",
"node_modules",
]
}
"./_build": write: contents: actions.build.contents.output
}
env: {
APP_NAME: string
NETLIFY_TEAM: string
NETLIFY_TOKEN: dagger.#Secret
}
}
actions: {
deps: docker.#Build & {
steps: [
alpine.#Build & {
packages: {
bash: {}
yarn: {}
git: {}
}
},
docker.#Copy & {
contents: client.filesystem."./".read.contents
dest: "/src"
},
bash.#Run & {
workdir: "/src"
mounts: {
"/cache/yarn": {
dest: "/cache/yarn"
type: "cache"
contents: core.#CacheDir & {
id: "todoapp-yarn-cache"
}
}
_nodeModulesMount
}
script: contents: #"""
yarn config set cache-folder /cache/yarn
yarn install
"""#
},
]
}
test: bash.#Run & {
input: deps.output
workdir: "/src"
mounts: _nodeModulesMount
script: contents: #"""
yarn run test
"""#
}
build: {
run: bash.#Run & {
input: test.output
mounts: _nodeModulesMount
workdir: "/src"
script: contents: #"""
yarn run build
"""#
}
contents: core.#Subdir & {
input: run.output.rootfs
path: "/src/build"
}
}
deploy: netlify.#Deploy & {
contents: build.contents.output
site: client.env.APP_NAME
token: client.env.NETLIFY_TOKEN
team: client.env.NETLIFY_TEAM
}
}
}
Kiến trúc tổng thể của đường ống.
dagger.#Plan & {
client: {
filesystem: {
// ...
}
env: {
// ...
}
}
actions: {
deps: docker.#Build & {
// ...
}
test: bash.#Run & {
// ...
}
build: {
run: bash.#Run & {
// ...
}
contents: core.#Subdir & {
// ...
}
}
deploy: netlify.#Deploy & {
// ...
}
}
}
Tóm tắt
Ngôn ngữ CUE được sử dụng để cấu hình đường ống, vì vậy điều này đương nhiên làm tăng một số ngưỡng, nhưng nếu bạn đã quen với CUE, bạn sẽ thấy rằng cấu hình đường ống rất đơn giản, về cơ bản chỉ cần nhìn vào định nghĩa của gói để biết cách sử dụng nó.