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

  • 0
    いいね
  • 0
    コメント

    はじめに

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

    さいごに

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