ConcourseとGithubとの相性まとめ

ConcourseとGithubについてまとめました

はじめに

ConcourseをメインのCIツールとして利用した場合のGithubとの相性についてまとめました。 検証もしながらすこしづつ更新していきます。

Trigger

Githubのレポジトリーをモニターして、コミットをトリガーをするのは簡単にできます。 Jobs内のtrigger: trueをつけることで、Concourseがアップデートを検知したタイミングで、タスクを走らせることができます。

 1resources:
 2- name: upstream-source-code
 3  type: git
 4  source:
 5    uri: https://github.com/<project>/<repo>
 6    branch: <branch>
 7jobs:
 8- name: Code updated
 9  plan:
10    - get: upstream-source-code
11      trigger: true
12    - task: something
13      // Do Something

Push

これも簡単にできます。 ポイントがoutputsに値をいれることで、最終的にレポジトリーへのpushがされます。以下を参照。

https://github.com/concourse/git-resource#out-push-to-a-repository

Githubにpushに使うprivate_keyなどは変数化して外部のCredential管理機能に使うとよさそう。

https://concourse-ci.org/creds.html

 1resources:
 2- name: source-code
 3  type: git
 4  source:
 5    uri: https://github.com/<project>/<repo>
 6    branch: <branch>
 7    private_key: ((sourceKey))
 8    private_key_user: ((sourceUser))
 9jobs:
10- name: merge-upstream
11  plan:
12    - get: source-code
13    - task: commit-push
14      config:
15        platform: linux
16        image_resource:
17          type: docker-image
18          source:
19            repository: alpine/git
20            tag: latest
21        inputs:
22          - name: source-code
23        outputs:
24        - name: source-code
25        run:
26          path: /bin/bash
27          args:
28            - -c
29            - |
30              set -x
31              cd source-code
32              git config --global user.name "concourse"
33              git config --global user.email "concourse@local"
34              // Modify Code
35              git add .
36              git commit -m "Commit and Push"

Pull Request

正式なものではないですが、以下のリソースがそれにあたるもののようです。

https://github.com/telia-oss/github-pr-resource

Status Badge

あります。
Readmeによく含まれるのですが、特定のジョブの最新のステータスを表示するもの機能です。

たとえば、Spring PetclinicのReadmeなどに含まれる、このbuild/passingなどと表示されている機能です。

さすがにこの機能はないかと思っていたところ、ちゃんとAPIが用意されていました。 以下のAPIドキュメントに紹介されていますが、パイプライン全体の状態だけでなく、各Jobのステータスも拾えるようになっています。

https://concourse-ci.org/observation.html#badges