2015-04-22 19:25:11

Cocos2d-x + Travis CI + DeployGate

前回の記事にて、cocos2d-xでのアプリ作成とTravis CIを連携させるとこまでいった。
今回は成果物であるAPKをDeployGateにアップロードするところについて書き留めておく。

だいたいのやり方

  • ビルドが成功したらcurlコマンドにてDeployGateにAPKをアップロードする。
  • アップロードにあたってDeployGateのAPI Keyが必要になる。DeployGateにログインして個人設定的なところを見れば載っている。
  • API Keyは.travis.ymlに書くことになるが、そのまま載せちゃうとセキュリティ的に問題なので暗号化する。
    • 暗号化にはtravisコマンドを用いる。

ちょっと細かいやり方

まずはAPKアップロード成功後の.travis.ymlを載せておく。

language: android

# Handle git submodules yourself
git:
  submodules: false

env:
  global:
    secure: 'TeSR8JLJd2Z0erCxcgLinC+me5SfwpgcCNwiTsqXn09erOgos2+mUbVQaSyo7Bw4OF4TmNpejX+jETd/lL4fTiWRDw6NW/cqEelk57fXJ5mmf5ey+tB1EkMFwd8x7Fw2vBe4xtO8KeohI6D1Gtu1qTYU9t9x4bhAd4qL15Y5osE='

install:
  # NDK configuration
  - printenv
  - echo `pwd`
  - wget http://dl.google.com/android/ndk/android-ndk-r10d-linux-x86_64.bin
  - chmod a+x android-ndk-r10d-linux-x86_64.bin
  - ./android-ndk-r10d-linux-x86_64.bin -y | grep -v Extracting # because log will be too long!
  - export NDK_ROOT=`pwd`/android-ndk-r10d
  - echo $NDK_ROOT
  - export PATH=$PATH:$NDK_ROOT
  - echo $PATH

  # Android SDK configuration
  - export ANDROID_SDK_ROOT=/usr/local/android-sdk
  - export PATH=$PATH:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools

  # git submodule
  # Use sed to replace the SSH URL with the public URL, then initialize submodules
  - sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
  - git submodule update --init --recursive

  # cocos setup
  - cd ./cocos2d
  - python download-deps.py --remove-download=yes
  - python ./setup.py
  - export COCOS_CONSOLE_ROOT=`pwd`/tools/cocos2d-console/bin
  - export PATH=$PATH:$COCOS_CONSOLE_ROOT
  - export COCOS_TEMPLATES_ROOT=`pwd`/templates
  - export PATH=$PATH:$COCOS_TEMPLATES_ROOT
  - export ANT_ROOT=/usr/share/ant/bin
  - export PATH=$PATH:$ANT_ROOT
  - printenv
  - cd ..

script:
  - cocos compile -p android -j 8

after_success:
  - echo $TRAVIS_BRANCH
  - echo $TRAVIS_PULL_REQUEST
  - '[ "$TRAVIS_BRANCH" == "master" -a "$TRAVIS_PULL_REQUEST" == "false" ] && curl -F "file=@./bin/debug/android/KonaReflection-debug.apk" -F "token=${DEPLOYGATE_TOKEN}" -F "message=Deploy from Travis CI" https://deploygate.com/api/users/pankona/apps'

前回からの変更点(APKアップロードのために追加した部分)

前回から増えたり変更したりしたのは以下。

env:
  global:
    secure: 'TeSR8JLJd2Z0erCxcgLinC+me5SfwpgcCNwiTsqXn09erOgos2+mUbVQaSyo7Bw4OF4TmNpejX+jETd/lL4fTiWRDw6NW/cqEelk57fXJ5mmf5ey+tB1EkMFwd8x7Fw2vBe4xtO8KeohI6D1Gtu1qTYU9t9x4bhAd4qL15Y5osE='
- '[ "$TRAVIS_BRANCH" == "master" -a "$TRAVIS_PULL_REQUEST" == "false" ] && curl -F "file=@./bin/debug/android/KonaReflection-debug.apk" -F "token=${DEPLOYGATE_TOKEN}" -F "message=Deploy from Travis CI" https://deploygate.com/api/users/pankona/apps'

後者の部分で、${DEPLOYGATE_TOKEN}という環境変数を参照しているが、これを設定しているのが前者の部分。

DEPLOYGATE_TOKENの暗号化

以下のコマンドでDeployGateのAPI Keyを暗号化する。

$ gem install travis # travisコマンドを使えるようにする。
$ travis encrypt DEPLOYGATE_TOKEN={My DeployGate API Key} # DeployGateで確認したAPI Keyを暗号化するコマンド(中括弧はいらない)。

このコマンドで得られた文字列をそのまま.travis.ymlに貼っつければOKである。

いつアップロードするか

以下の条件を満たした場合のみ、APKのアップロードを行うようにした。
これは、Pull Requestがmasterにマージされたとき、を意味している(つもり)。
"$TRAVIS_BRANCH" == "master" -a "$TRAVIS_PULL_REQUEST" == "false" ]

これをやっとかないと、ブランチにコミットをPUSHしたタイミングだったりPull Requestを作ったタイミングだったり、でアップロードが走る。
個人的にはやり過ぎ感があったので、APKはmasterからだけ作ればいいやという制限を施した。

これがそこそこ楽だと思います

AndroidアプリにAPKをいちいち頑張って転送しなくても、開発中アプリをインストールすることができるようになった。
ちなみに、アップロードされたAPKはDeployGateアプリ経由で取得することになる。

今回はここまで。

Share