Github の Personal Access Token を使って `git submodule update --init --recursive` する in Travis CI
はじめに
プライベートリポジトリをサブモジュールとして利用する必要があったので、 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.*$/"
さいごに
スコープの設定をいじると他のことも簡単にできそうなので、いろいろ試してみるのも面白いと思います.
Qiita で書いた記事
『探索!ガダルーク坑道』の周回で生まれたログレスの所持品の使いづらさ
シュウマイを倒す作業
イカを倒すのも若干飽きてきたので、「探索!ガダルーク坑道」で過去の装備品のスキルレベル上げをしている。
ちなみにボックスの空きが2,3個しかないので面倒くさい作業と化している。
昔のアイテムが中途半端にスキルレベルを上げてしまいボックスの圧迫になってるのでもう1つの方のマンドラボックスにどうにかして収納したいと思いやっているが苦行である。
これを解決するために運営への要望を出すなら…
- 所持品に空きがないので、マンドラボックスに直接アイテムを送る実装が欲しい
- マンドラボックスも空きがないので、レア度によって枠を潰す仕様をどうにかして欲しい
等
キリがないのでこれにて終わり。
しれっと増えた枠すら簡単に埋めてしまう自分が怖いよ…