Concourse はオープンソースなCI/CDツールで、コンテナベースで稼働する。
Pivotalのエンジニアが開発しており、1.0.0がリリースされたのが2016年と比較的新しいツールで、Go で開発されている。
パイプラインベースのCI/CDツール、Concourseとは? | Think IT(シンクイット)
GitHubリポジトリ を見るとstarは7.1k(2024-01-31時点)あり、コミットも活発に行われている様子
Jenkins の代替を探している中で見つけた。
コンテナで簡単に動かせるというのが嬉しい。
Tutorial
https://concourse-ci.org/quick-start.html
日本語チュートリアルもあるので、こちらも適宜参考にしつつ進める
Docker Compose でサーバーを起動する
バージョンを指定しておく
M1で動かない
Worker fails to start on Docker for Mac with M1 · Issue #8270 · concourse/concourse
いきなり壁にぶつかる。compose.yamlに注意書きされている通り、ARMマシン上では CONCOURSE_WORKER_RUNTIME: "houdini"
に変える必要がある。
起動した
起動すると localhost:8080 でこんな画面が見れるようになる。
![[note/Pasted-image-20240131031815.png|]]
Fly cliを入れる
Concourse用のCLI。
Pipelineを作ってみる
Concourseには pipeline, job, step, resource というコンポーネントがある。
関係性は以下のようになっていて、pipelineの中に複数のjobやresourceがあり、jobは複数のstepで構成される。
graph TD;
subgraph Pipeline
R_1[Resource]
R_2[Resource]
R_3[Resource]
subgraph Job1
D_1[Step:get]
D_2[Step:task]
D_3[Step:put]
end
subgraph Job2
E_1[Step:get]
E_2[Step:task]
end
end
R_1 --> D_1
R_2 --> D_1
D_1 --> D_2
D_2 --> D_3
R_3 --> E_1
実行するイメージやコマンドを書く
M1で動かない
ジョブが find or create container on worker 06630b9c1782: stream image metadata file: failed to stream out from volume
といったエラーでコケる。。
“Quickstart” Guide doesn’t work on M1 Mac due to docker compose issue · Issue #8719 · concourse/concourse
こちらにある通り、imageを有志が作ったarm対応の rdclda/concourse:7.9.1
に変更して、 CONCOURSE_WORKER_RUNTIME: "containerd"
に戻したところ正常実行されるようになった。
あくまで非公式なのでarmで動かしたい場合は公式の対応を待ったほうが良さげ。
Dockerイメージをビルドするパイプライン
⇒ oci-build-task で失敗した。。Macだからなのか、このタスクのイメージ自体あまり更新されていなくて古いからなのかちょっと調べただけではわからなかった
#5 [1/4] FROM docker.io/library/busybox@sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74
#5 resolve docker.io/library/busybox@sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74 0.0s done
#5 sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe 0B / 2.22MB 0.2s
#5 sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe 2.22MB / 2.22MB 0.3s done
#5 extracting sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe
#5 extracting sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe 0.3s done
#5 DONE 0.7s
#6 [2/4] RUN echo "I'm simple!"
#6 0.229 Error while loading init: No such file or directory
#6 0.263 runc run failed: unable to start container process: can't copy bootstrap data to pipe: write init-p: broken pipe
#6 ERROR: process "/bin/sh -c echo \"I'm simple!\"" did not complete successfully: exit code: 1
------
> [2/4] RUN echo "I'm simple!":
#6 0.229 Error while loading init: No such file or directory
#6 0.263 runc run failed: unable to start container process: can't copy bootstrap data to pipe: write init-p: broken pipe
------
Dockerfile:3
--------------------
1 | FROM busybox
2 |
3 | >>> RUN echo "I'm simple!"
4 | COPY ./stranger /stranger
5 | RUN cat /stranger
--------------------
そこでBuildkitではなく Kaniko を使ってみることにした。
https://github.com/concourse/oci-build-task/issues/46
⇒ これであればビルドは通った。記述量多すぎてメリットが薄れるかも…
Kubernetes上にデプロイする
Helm chart がある!
参考