ConcourseCI、見た目が良くて、何よりジョブがいい感じに可視化されるので、「何をやってるのか」がひと目でわかっていいんですよね。ドキュメント性があるというか。
やっぱ視覚化されるとおもろい (それはそれとして毎回思ってたのと違うグラフが出てくる) pic.twitter.com/q0ClUhfc6s
— ととがんま (@totegamma) July 20, 2022
ただ、例えばJenkinsを完全に置き換えられるかというと全然そういうことはなくて、色々足りない機能があります。 「パラメーター付きビルド」がその1つです。
こういう名前、こういうパラメーターでビルドしたものを特定の場所に配置して~というような、ワンショットなジョブを実行できるのが「パラメーター付きビルド」ですが、concourseはジョブがいわゆる純粋関数のようになっていて、ビルドごとに異なるパラメーターを設定するためには、そのパラメーターを表すようなjsonファイルなどを入力してあげる必要があります。
これはflyコマンドをつかってコマンドラインからディスパッチすれば出来るにはできるんですが、webだったり、他の方法からでも柔軟に発行できるとより良いですよね。
そこで、僕は試しにAWSのSQSを使ってConcourseのパイプラインをディスパッチできるようにしたので、それについて軽く紹介します。
Concourse SQS Resource
このためにSQSをconcourseで使えるようにしたリソースを作りました。こちらになります。
実装がすごく雑なので、今のところうまく動いているようには見えてるんですけど、もしかしたらおかしなことになるかも… メッセージの設定とかも十分に外に出てないですし。PRお待ちしております。
これを使うと、SQSのメッセージを取得してタスクから参照することができるようになります。
SQSの方をTriggerに設定して、gitレポジトリなどのその他のリソースを非トリガーに設定すれば、もうそれだけでパラメーター付きビルドはできたようなものでしょう。(完)
サンプルコード
resource_types:
- name: sqs-resource
type: docker-image
source:
repository: ghcr.io/totegamma/sqs-resource
tag: master
resources:
- name: mysqs
type: sqs-resource
icon: aws
source:
region_name: 'YOUR_REGION'
access_key: 'YOUR_AWS_ACCESS_KEY'
secret_key: 'YOUR_AWS_SECRET_KEY'
queue_url: 'YOUR_SQS_QUEUE_URL'
jobs:
- name: printoutInput
plan:
- get: mysqs
trigger: true
- task: printoutInput
config:
platform: linux
image_resource:
type: registry-image
source: {repository: busybox}
inputs:
- name: mysqs
run:
path: sh
args:
- -cex
- |
ls mysqs
cat mysqs/Body
これにgitリソースを追加した図
