前回の記事にて、cocos2d-xでのアプリ作成とTravis CIを連携させるとこまでいった。
今回は成果物であるAPKをDeployGateにアップロードするところについて書き留めておく。
curl
コマンドにてDeployGateにAPKをアップロードする。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'
前回から増えたり変更したりしたのは以下。
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の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アプリ経由で取得することになる。
今回はここまで。
引き続きcocos2d-xを使ってブロック崩しを作っている。
かれこれ2ヶ月あまりが経過した。ほぼ通勤時間でのみ作っている。
いまのところの作業の流れとしては、
という手順なのであるが、実機へのデプロイがなかなか面倒である。
基本的に電車内なので、ケーブルをスマホとPCに繋いで〜、というひと手間がなかなか面倒である。
すると端末間のファイル共有だったり、原始的にメール越しにAPK共有、等があるが、、、やはり面倒である。
デプロイもっと楽にする手段としてDeployGateさんを使わせてもらうという手がある。
これを用いると、変更をコミットするとそれだけで最新版APKがメールで送られてくるっていうようになるようである。
なので今回はこれを導入してみることにした。流れは以下のような感じになる予定である。
以下、長文。
CI環境としてTravis CIをチョイスした。無料で使えるからである(Publicなリポジトリ限定かな)。
初のTravis CI利用ということもあり、なかなかに躓いたというか知らんことが多かったので、備忘録を残す。
ちょいちょい試してみたところ、以下のような感じである。
ざっくりだがこんな感じだろうと。無料で使えるにしては十分かな。
設定手順はこんな感じ。
(1)と(3)は別に問題ないと思われる。問題は(2)である。
以下、.travis.ymlの内容について書く。
いかにもやっつけ感満載でありつつ、とりあえずビルドパスするところまでいけた。
記念に貼り付けておく。もしかして誰かの役に立つことも願いつつ。
language: android
# Handle git submodules yourself
git:
submodules: false
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
script:
- cd ..
- cocos compile -p android -j 8
躓き備忘録を以下に記しておく。
Ubuntu 14.04(64bit)らしい。
なので各種Linuxのコマンドは使える。
cocos2d-xの開発では、cocosコマンドによるビルドを使うのが便利である。
ただし、ちょっと環境構築が面倒な一面もある。
上記のymlでは、結果的にcocosコマンドを使える状態にしている。
「Travis CIはAndroidのビルドをサポートしている」ようなのだが、なのでもしかしたら、
cocosコマンドを使えるようにしなくても、Ant、ndk-buildあたりでなんとかできるのかもしれない。
と思ったのだが、どうやらNativeビルドには対応していないようである(あらかじめ用意されてはいない)。
なので、おとなしくcocosコマンドを使う方針で設定してみた。
上記ymlでいうところの、以下の箇所を実行するとerror 137を報告してビルドが失敗に終わることがあった。
- 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!
解凍時にログをリダイレクトしているが、これをしないとログが大量に出過ぎることが原因でTravis CIに怒られ、ビルドが失敗に終わる。
それとは別に、解凍にメモリをくいすぎて、いわゆるメモリショートでプロセスが殺されるのがerror 137の原因らしい。。。
sudo: required
をファイルの冒頭に書いていたのであるが、それを消したらerror 137は解消した。
意味不明だが、回避策もよくわからないのでもう追っかけるのはやめた。。。
NDKは自前で用意する必要があるが、Android SDKはTravis CI側で用意してくれているので、あえて自前で用意しなくてもいい。
というか、Android SDKをダウンロード → Update SDK の流れを実施すると、今度はストレージ容量を圧迫してしまうため、
後続の処理(git submodule)実行時にストレージ容量不足でビルドが失敗に終わる。
有料にすれば解決するのかな?とりあえずわしの環境ではAndroid SDKを自前で準備することは出来なかった。。
SSH鍵の関係で、gitスキームを用いているsubmoduleの取得に失敗する。
なのでgitを用いてる部分はhttpsに無理やり書き換えている。以下の部分である。
涙ぐましい。
# Use sed to replace the SSH URL with the public URL, then initialize submodules
- sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
cocos2d設定の過程でsetup.py
を実行するところがあるが、こいつは.bashrc
を書き換える。.bashrc
内にexport
文がいくつか追加される。本来、source ~/.bashrc
等とやれば環境変数が有効になるのであるが、、、
Travis CIのScript上では効かないので、しかたなく.bashrc
に追記されるものと同等の設定を.travis.yml
にて実施した。
以下の部分である。
- 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
ここまでいくと、Travis CI上でcocos
コマンドが使えるようになる。cocos compile -p android -j 8
でビルド実行。APKが生成される(デバッグ版)はずである。
成果物がでてくるところまできたので、Travis CIの設定はひとまず以上とした。
おかげさまで、リポジトリにTravis CIバッヂを貼ることができた。
https://github.com/pankona/KonaReflection
ビルド成功の後、curlコマンドでAPKをDeployGateさんへ送信すればいい模様。
できたらまた躓きポイントを載せていこうと思う。
追記:DeployGateさんへのアップロードについては次回記事も見てね。
今回はここまで。
2015.03.07に娘が生まれました。
これからも頑張ります。近況を記す。
昨年末からあまりRaspberry Piを触れない環境におかれていたもので、
何か手軽にプログラミングをエンジョイできないかと思って、探して見た結果がcocos2d-x。
Unityじゃなくてcocos2d-xにしたのは、Linux向けの開発環境があるからである。
Unityやってみたかったけど、LinuxでやりたかったらWineを使え、みたいな感じになっているようで、
そんなことこっちから願い下げだ、ということで、cocos2d-x。
C++で書けて、これから触ってみようと思っているLuaとも相性がいい様子で、願ったり叶ったりである。
なかなか始めてみると面白い。
とりあえずわかりやすいところから馴染んでいこうということで、
ブロック崩しを題材にして制作に励んでいるところ。リポジトリはこちら。
KonaReflection
プロジェクト名は3日程真剣に考えた挙句これである。
開発環境は、愛機のVaio Pro 13(Arch Linux)と職場Mac Book Proの両刀で実践中。
デプロイターゲットはLinux、Mac(いずれもデバッグ目的)、そしてAndroid。
※ 職場MBPを使っているが、ちゃんと仕事はしている。暇なときにやっている。
どこまで作るかという話もあるが、とりあえず誰かを楽しませることが出来るレベルまで作ろうかと思う。
せっかく作るなら、一応、体としてはやりきりたいではないか。
なんやかやあって途絶えてしまったが、Longest Streakは13まで更新した。
そんなもん伸ばして何になるの、というのもわかるが、ちょっとでも、毎日ソース更新しなきゃ、という気持ちになるのであれば、
意味がなくもないんじゃないかと思いつつ。また仕切りなおして伸ばしていこう。
Android向け、という話ではそこそこ記事があるが、ことLinux向けで開発環境構築というと記事がなかなかない。
しかし出来るようになった。Eclipse+CDT+諸々設定(←ここがめんどい)。
設定方法は別の記事としてまとめようと思う。cocos2d-x+Eclipse+Linux向けビルド、の体。
いっときEclipseを用いてcocos2d-xの開発環境を作ることを諦めかけた(めんどすぎた)のだが、
そのとき、Vimだけでやれるように開発環境構築を頑張ってみたのである。
割といい具合になったのでこっちもそのうち記事にしてみようと思う。
Vim+Syntastic+NeoComplete+Clang_Complete、といった組み合わせである。
だけどまあ結局はEclipseを使いそうである。事足りてしまうし、むしろvrapperがあればそこそこ快適である。