はじめに
プライベートリポジトリをサブモジュールとして利用する必要があったので、 Private Dependencies - Travis CI をいろいろ調べていたら Github の Personal Access Token を利用して git submodule update --init --recursive
が行える方法があったのでまとめてみました.
本家では Gemfile を利用していましたが、作るのが面倒だったのでシェルスクリプトに置き換えました.
なぜ Personal Access Token を利用するのか?
.travis.yml
さえ作ってしまえば、コマンドを使わずに設定が可能だからです.
今から説明する方法は、Travis CI の [Environment Variables] にトークンを登録すれば簡単に更新することができます. SSH鍵の生成やら暗号化とかの手間が必要ありません. すべてブラウザの中で完結するので、引き継ぎ作業が発生した場合に楽になります.
ただし、今から説明する初期設定はターミナルを利用しています. (Travis CI の [Environment Variables] にトークンをする作業なんて説明がなくてもできるので)
Travis CI の設定
Github Personal Access Tokens の生成
Personal Access Tokens にて生成する. [Generate new token] から生成画面へ移動します. [Token description] と [Select scopes] に適切な入力を行います.
トークンの説明 (Token description) に 「Travis CI for myaccount/myrepository」 と記述すると myaccount/myrepository のために Travis CI で利用しているトークンであるということがわかりやすいです.
サブモジュールとして利用するのであれば、スコープ (Select scopes) の repo
にチェックをするだけで十分です.
Travis CI に Github Personal Access Token を登録
平文で扱うのはよくないので暗号化します.
(あらかじめ gem install travis
で travis
をインストールする必要があります.)
travis env set CI_USER_TOKEN the-generated-token --private -r myorg/main
(the-generated-token
は先程取得した Github Personal Access Token です.)
これで、 myaccount/myrepository の Travis CI 内では $CI_USER_TOKEN
が利用できるようになりました.
.netrc の作成
ログイン処理を省略するために必要なファイルです.
machine github.com login the-generated-token
中身に先程取得した the-generated-token (Github Personal Access Token) を記述する必要があるので bash コマンドで生成してしまいましょう.
echo -e "machine github.com\n login $CI_USER_TOKEN" >> ~/.netrc
.gitmodules
このファイル内の git@github.com:myaccount/myrepository.git
形式を https://the-generated-token@github.com/myaccount/myrepository.git
形式に変更しなければいけません.
このとき、 Personal Access Token を付与する必要があるのでこちらも bash コマンドで変更してしまいましょう.
sed -i -e "s/git@github.com:/https:\/\/$CI_USER_TOKEN@github.com\//" ./.gitmodules
.travis.yml
上記に記載したスクリプト等を .travis.yml
に追加すると以下のようになります.
例として、 Android のビルドを想定しています.
language: android sudo: required android: components: - tools - platform-tools - build-tools-25.0.1 - android-25 - extra git: submodules: false before_install: - sed -i -e "s/git@github.com:/https:\/\/$CI_USER_TOKEN@github.com\//" ./.gitmodules - echo -e "machine github.com\n login $CI_USER_TOKEN" >> ~/.netrc - git submodule update --init --recursive script: - "./gradlew clean build" branches: only: - master - develop - "/^release.*$/"
さいごに
スコープの設定をいじると他のことも簡単にできそうなので、いろいろ試してみるのも面白いと思います.