Article:

ConcourseCI、見た目が良くて、何よりジョブがいい感じに可視化されるので、「何をやってるのか」がひと目でわかっていいんですよね。ドキュメント性があるというか。

ただ、例えばJenkinsを完全に置き換えられるかというと全然そういうことはなくて、色々足りない機能があります。 「パラメーター付きビルド」がその1つです。

こういう名前、こういうパラメーターでビルドしたものを特定の場所に配置して~というような、ワンショットなジョブを実行できるのが「パラメーター付きビルド」ですが、concourseはジョブがいわゆる純粋関数のようになっていて、ビルドごとに異なるパラメーターを設定するためには、そのパラメーターを表すようなjsonファイルなどを入力してあげる必要があります。

これはflyコマンドをつかってコマンドラインからディスパッチすれば出来るにはできるんですが、webだったり、他の方法からでも柔軟に発行できるとより良いですよね。

そこで、僕は試しにAWSのSQSを使ってConcourseのパイプラインをディスパッチできるようにしたので、それについて軽く紹介します。

(ちなみに、discordでSQSにメッセージを送るとdiscordからジョブを発行できます)


Concourse SQS Resource

このためにSQSをconcourseで使えるようにしたリソースを作りました。こちらになります。

githubレポジトリ

実装がすごく雑なので、今のところうまく動いているようには見えてるんですけど、もしかしたらおかしなことになるかも… メッセージの設定とかも十分に外に出てないですし。PRお待ちしております。

これを使うと、SQSのメッセージを取得してタスクから参照することができるようになります。

SQSの方をTriggerに設定して、gitレポジトリなどのその他のリソースを非トリガーに設定すれば、もうそれだけでパラメーター付きビルドはできたようなものでしょう。(完)

サンプルコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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リソースを追加した図