Open8
Dagger 入門
最近話題の Dagger とはなにか、ちょっとドキュメントを読んでみた。
Docker の作者が開発
portable devkit for CI/CD pipelines
まだ early stages of development
DevOps エンジニアが CI/CD pipeline を素早く構築できる
- ローカルで動かせる
- 検証しやすい
- ベンダーロックインにならない
- エコシステムの提供
- 再利用できる
解決したい課題
- CI/CD pipeline が複雑すぎる
- テスト・デバッグが難しい
- 再利用性が低く、車輪の再発明をしがち
解決方法
- 宣言的な言語・API
- パッケージ管理システムにより Action を共有できる
2 つの技術を使っている
- CUE: https://cuelang.org/
- BuildKit: https://github.com/moby/buildkit
2 つの問題を解決する
- dev/CI drift
- CI とローカル用に 2 つコードを書く必要はない。 Dagger plan は CI, ローカル両方で使える
- CI lock-in
- Dagger はどのメジャーな CI プラットフォームでも実行できる
Docker に依存している。
BuildKit に依存しているし、他のコンテナランタイムだとだめなのかな?
とりあえず Getting Started
アプリケーション固有のツールをホストにインストールする必要がない。
コンテナ上で実行しているから。
生成物はホストに保存される。
$ dagger do build
ローカルで実行できるので、 commit, push する必要がなく、早くループを回せる。
結果はローカルにキャッシュされるので、高速に実行できる。
The default mode is auto. If you want to keep each actions' logs, use the plain mode
package main
import (
"dagger.io/dagger"
"universe.dagger.io/alpine"
"universe.dagger.io/bash"
)
#Run: {
_img: alpine.#Build & {
packages: bash: _
}
bash.#Run & {
always: true
input: _img.output
}
}
dagger.#Plan & {
actions: {
hello: #Run & {
script: contents: "echo \"Hello!\""
}
}
}
普通に実行すると、コマンドのログが見れない
$ dagger do hello
[✔] actions.hello.script 0.0s
[✔] actions.hello
log format を指定すると見えるが、ログが見やすいかと言われると微妙。けど仕方ない気もする。
$ dagger --log-format plain do hello
5:51PM INFO actions.hello.script._write | computing
5:51PM INFO actions.hello._img._dag."0"._pull | computing
5:51PM INFO actions.hello.script._write | completed duration=0s
5:51PM INFO actions.hello._img._dag."0"._pull | completed duration=0s
5:51PM INFO actions.hello._img._dag."1"._exec | computing
5:51PM INFO actions.hello._img._dag."1"._exec | completed duration=0s
5:51PM INFO actions.hello._exec | computing
5:51PM INFO actions.hello._exec | completed duration=100ms
5:51PM INFO actions.hello._exec | #5 0.042 Hello!