LoginSignup
12
4

More than 5 years have passed since last update.

Github の Personal Access Token を使って `git submodule update --init --recursive` する in Travis CI

Last updated at Posted at 2017-04-04

はじめに

プライベートリポジトリをサブモジュールとして利用する必要があったので、 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 travistravis をインストールする必要があります.)

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 の作成

ログイン処理を省略するために必要なファイルです.

.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 のビルドを想定しています.

.travis.yml
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.*$/"

さいごに

スコープの設定をいじると他のことも簡単にできそうなので、いろいろ試してみるのも面白いと思います.

12
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4