Concourse CIでGitHub認証機能をBOSHによるデプロイ時に有効にするやり方


最近業務でConcourse CIを使ったCI環境の構築・運用の調査をしていて、その際にドキュメントを読んでもよく分からず結構詰まってしまった所をメモして残しておきたいというのが書いた動機。

Concourse CIがどんなものなのかを日本語でざっくり知りたい人は以下の記事を読むのがいいと思います。

あと、BOSHが何かとか、BOSHでどうやってConcourse CIをデプロイするのかとかは以下の記事を読んで貰った方が圧倒的に分かりやすいと思うので省略します。

GitHubログイン機能

Standalone binary使用の際

まずBOSH版の前に軽くStandalone binaryの場合について。

Concourse CIのStandalone binaryを使用した時にGitHubログイン機能を追加したい時は concourse web コマンドのヘルプを見れば分かるはず。他の起動オプションに関しては公式ドキュメントを参照すること。

sample.sh
$ concourse web --help
(いろいろ省略)
    GitHub Authentication:
          --github-auth-client-id=                   Application client ID for enabling GitHub OAuth.
          --github-auth-client-secret=               Application client secret for enabling GitHub OAuth.
          --github-auth-organization=ORG             GitHub organization whose members will have access.
          --github-auth-team=ORG/TEAM                GitHub team whose members will have access.
          --github-auth-user=LOGIN                   GitHub user to permit access.
          --github-auth-auth-url=                    Override default endpoint AuthURL for Github Enterprise
          --github-auth-token-url=                   Override default endpoint TokenURL for Github Enterprise
          --github-auth-api-url=                     Override default API endpoint URL for Github Enterprise

要するに公式ドキュメントのこの辺りを読んで、OAuthの項目の1まで設定した(=OAuth app on GitHubを作成して設定した)後 --github-auth-cliend-id とか必要なオプションに適切な値を設定して起動すれば問題ないです。

BOSHによるインストール、デプロイの際

公式ドキュメントのRestricting Accessの項をちゃんと読めばヒントはあるのですが、いくつか罠に陥るポイントがある(と自分は思った)のでメモします。

その罠とは以下の通り。

私自身もBOSHとかConcourse CIのアーキテクチャをそこまでしっかり理解しているわけではないので、あとは実際の設定ファイルをどう書くかだけ提示して終わりにします。

最初の方に紹介したBOSHでConcourse CIをAWSにインストールするという記事の記述をそのまま引き継いで説明します。

この記事の中で concourse.yml というファイルを記述する箇所がありますが、そのファイル内の atc という名前のjobの中の properties という箇所を例えば以下のように設定してやればGitHub認証機能が追加されます。

concourse.yml
---
name: concourse

# replace with `bosh status --uuid`
director_uuid: <%= `bosh status --uuid` %>

(色々省略)

instance_groups:
- name: web
  instances: 1
  vm_type: web
  stemcell: trusty
  azs: [z1]
  networks: [{name: public}]
  jobs:
  - name: atc
    release: concourse
    properties:
      # replace with your CI's externally reachable URL, e.g. https://ci.foo.com
      # Elastic IPで払い出したIPを使用
      external_url: <your url>

      # ここからがGitHub認証に関わる部分
      github_auth:
        client_id: <reducted>
        client_secret: <reducted>
        authorize:
          - organization: <your organization>
            teams: all
(以下省略)

公式ドキュメントの該当箇所をよく読めば、OAuthの項目で以下のように書かれています。

In BOSH you would set the atc.github_auth.authorize property with something like the following:

つまり、 properties 以下に github_auth 以降の値をYAMLの形式で書いてやればいいということです。

上の例だと <reducted> とか <your organization> となっているところを各自の値を設定してやれば、設定したorganizationに属するメンバー全員がConcourse CIのWeb UI上でGitHub認証でログインできるようになります。

正直ドキュメントの書き方が分かりづらくて何回も失敗しましたが、とりあえずBOSHでもちゃんと設定できるということだけは残しておきます。