.travis.yml
にトークンなどのセンシティブな情報を暗号化して記述する方法のメモ。
例えば、Slackへの通知のトークンを暗号化したり、GitHubにpushしたい場合などに使用するGitHubのパーソナルアクセストークンを暗号化したりなどに利用する。
仕組み
Travis CIの側で各リポジトリ毎に秘密鍵と公開鍵のペアを持っている。travisコマンドで公開鍵を使ってセンシティブな情報を暗号化して.travis.yml
に記載しておくと、ジョブの実行時にTravis CIのサーバー側で復号される。
準備
travisコマンドが必要なのでインストールする。
brew install ruby
gem install travis
手順
エンドポイントの確認と変更
エンドポイントを確認する。デフォルトのエンドポイントはhttps://api.travis-ci.org/
となっている。
travis endpoint
travis-ci.orgではなくtravis-ci.comの場合は、以降のコマンドで-e https://api.travis-ci.com/
のようにエンドポイントを指定する。あるいはそのショートカットである--com
または--pro
を指定することもできる。
Enterpriseの場合は、-X
フラグも必要なので、-X -e https://travis.example.com/api
を指定する。
デフォルトのエンドポイントを変更することもできる。
travis endpoint --set-default -X -e https://travis.example.com/api
フラグ | 意味 |
---|---|
-X, --enterpise | Enterprise向けのセットアップを使う |
-e, --api-endpoint | エンドポイントのURLを指定 |
--set-default | エンドポイントをデフォルトとして設定 |
ログイン
GitHubのアカウントにログインする。パスワードあるいはGitHubでパーソナルアクセストークンを発行し、そのトークンでもログインできる。パーソナルアクセストークンに与えるべき権限についてはこちらを参照。
travis login --com
GitHub Enterpriseへのログインがシングルサインオンの場合は、パスワードがないのでパーソナルアクセストークンでログインする必要がある。
travis login -X -e https://travis.example.com/api --github-token <personal access token>
暗号化
暗号化したい文字列を指定して暗号化する。どこのリポジトリかはカレントディレクトリから自動的に検知されるが、-r sotoiwa/webapp-sample
のように明示的に指定することも可能。
ここではSlackへの通知用のトークンの例を示す。Slack通知用のトークンをSlack Appの設定から確認し、暗号化する。
travis encrypt --com "sotoiwa:<通知用のトークン>"
表示された文字列を.travis.yaml
に記載する。
notifications:
slack:
secure: "<暗号化された文字列>"
なお、--add notifications.slack
のようにオプションをつけることで、暗号化と同時に.travis.yml
に直接追加することもできる。