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


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

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

- [パイプラインベースのCI/CDツール Concourse CI入門](https://blog.ik.am/entries/379)
- [はじめてのConcourse CI](https://blog.ik.am/entries/380)

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

- [BOSHを使ってConcourse CIをAWSにインストール](https://blog.ik.am/entries/382)
- [BOSHを使ってConcourse CIをAWSにインストール (NAT利用版)](https://blog.ik.am/entries/383)

# GitHubログイン機能
## Standalone binary使用の際
まずBOSH版の前に軽くStandalone binaryの場合について。

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

```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
```

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

## BOSHによるインストール、デプロイの際
[公式ドキュメントのRestricting Accessの項](http://concourse.ci/authentication.html)をちゃんと読めばヒントはあるのですが、いくつか罠に陥るポイントがある(と自分は思った)のでメモします。

その罠とは以下の通り。

- [BOSH](http://bosh.io/)の知識
- Concourse CIを構成しているコンポーネントであるATCがConcourse CIの[Web UIとスケジューラーを担当しているということ](http://concourse.ci/architecture.html#architecture-atc)
	- GitHub認証機能はWeb UIに関わってくるので、ATCに対して設定をする必要があるということ

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

最初の方に紹介した[BOSHでConcourse CIをAWSにインストールするという記事](https://blog.ik.am/entries/382)の記述をそのまま引き継いで説明します。

この記事の中で `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
(以下省略)
```

[公式ドキュメントの該当箇所](http://concourse.ci/authentication.html)をよく読めば、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でもちゃんと設定できるということだけは残しておきます。