Android
Git
TravisCI

[Android]アプリリリース時に自動でタグを付ける


やること

GitHubで管理しているAndroidアプリのソースコードについて、masterに修正をpush or マージした時に自動でgitのタグを付ける。ここでは、AndroidアプリのversionNameをタグ名とする。


やるモチベーション

リリース時にgitのタグを手動でつけるのが面倒。

が、タグが付いていた方がリリースしたアプリのバグ解析がしやすい。


前提


  • GitHubのPrivateリポジトリでAndroidアプリのソースコードを管理していること

  • 上記のリポジトリに対して、Travis CI動かしていること

  • Travis CIとアプリのリポジトリにアクセスできるGitHubアカウントを持っていること

  • 開発用PCにRubyをインストールしていること


versionNameからGitのタグを付けるスクリプトの記述

AndroidアプリのversionNameは、Gradleを利用すると簡単に取得できる。

よって、Gradleタスクで目的のスクリプトを作る。

app/build.gradleに以下を記述する。

task taggingByVersionName << {

def tagName = android.defaultConfig.versionName
println "tagging $tagName"
"git tag $tagName".execute().waitFor()
"git push origin $tagName".execute().waitFor()
}

"".execute()でコマンド実行。

waitFor()を呼んでいるのは同期的にコマンドを実行させるため。

これをつけていないとTravis CI上で正常に動作しないので注意


Travis CIにリポジトリアクセス用のSSH Keyを登録する

これをしておかないと、タグのpushができない。

やり方はいろいろあるが、リポジトリにアクセス権があるユーザのSSH KeyをTravis CIに登録する方式で実現する(Travis CIの公式ページの言い方でいえば、User Key方式)。

Androidアプリのプロジェクトのトップで、以下のコマンドを実行。

gem install travis -v 1.8.9 --no-rdoc --no-ri

travis login --pro
travis sshkey --generate

usernameとpasswordが聞かれたらGitHubアカウントのものを入力。

秘密鍵を保存するか聞かれるが'no'を選択しておく。

SSH Key周りの詳細は、Travis CIの公式ドキュメントを参照。

https://docs.travis-ci.com/user/private-dependencies/#user-key


.travis.ymlの記述

Travis CIのdeploy jobでタグ付けする例。

いろいろ書き方はあるのであくまで例。deploy jobでなくても良い。

deploy:

- provider: script
script: ./gradlew taggingByVersionName # タグ付け&Pushするタスクを実行
on:
branch: master # タグ付けをmasterブランチに限定

# タグのpush時にTravis CIのジョブが実行されないようにする
branches:
except:
- "/^v?[0-9\\.]+/"

これをgitでcommit & pushする。


動作確認

masterに他のブランチをマージしたり、pushする。

すると、Travis CIのジョブが動いて、タグ付けが行われるはず。

AndroidアプリのversionNameが"1.0.0"だとしたら、masterに"1.0.0"というタグが付く。


備考

既に付けようとしているタグが存在していても、Travis CI上ではエラーにならない。

Travis CI上にSSHキーを登録する方法は、個人ブログなどでいろいろ記述されているがTravis CIの公式ドキュメントの方法でないと上手く行かなかった(自分のやり方の問題かもしれないが)。