Travis CIからGitHub Releasesへの自動デプロイ

こんにちはtatsyです。

相変わらず、テスト環境に凝っている今日この頃です。

今日は意外と解説しているページがなかったので、Travis CIからGitHubのReleasesへ自動でデプロイする方法についてまとめてみたいと思います。

手順は、

  • GitHubでTravisからのPushおよびDeployを許可
  • Travis CI用のトークンの暗号化
  • デプロイのための.travis.ymlの書き方

となっております。順にご説明したいと思います。
 

GitHubでTravisからのPush/Deployを許可


まず、GitHubにアクセスして、ユーザのSettingsページに移動します。

左側のメニューに「Personal access tokens」という項目があるので、そこに移動します。

その上側に「Generate new token」というメニューがあるので、そこをクリックし、新しいトークンを生成します。

多分、初期状態では以下のようになっているはずです。

generate_new_token

一応、安全のために「repo_deployment」と「public_repo」だけにチェックを入れてトークンを生成します。

ちなみにトークンを生成した画面を一度閉じてしまうと、変更するまで見えなくなるので注意してください。

以下、解説のために生成したトークンを「my_access_token」として話を進めます。
 

Travis CI用のトークンを暗号化


生成したトークンを.travis.ymlに直打ちするのはさすがにヤバいので、これを暗号化します。

暗号化するためのプログラムはRubyGemsで落とします。まずRubyをインストールしていただいて、

でプログラムがインストールできます。

インストールしたら暗号化です。暗号化のコマンドは、

です。

ここでポイントなのですが、今回のデプロイでは現在のコミットにタグをつけてプッシュする処理と、リリースの処理で2つの暗号化されたトークンが必要です。

具体的には以下の2種類です。

今回は説明のために上の暗号化結果を「encrypted_gh_token」、下の暗号化結果を「encrypted_plain_token」として話を進めます。
 

デプロイのための.travis.ymlの書き方


最後は.travis.ymlでデプロイの設定をします。

基本の書き方は、

です。

環境変数の設定

デプロイの設定の前に.travis.ymlに環境変数を設定しておきます。

と書きます(カッコはわかりやすくするために付けているだけなので注意してください)。

デプロイの準備

デプロイの準備でやることは、主に配布用の圧縮データの生成です。

その他にもドキュメントの生成などは準備段階で行います。

配布データの生成が終わったらGitのユーザ設定を行って、タグへのコミットとプッシュを行います。

以下は、圧縮からプッシュまでの一連の処理を行うためのスクリプトになります。

 

デプロイの処理

デプロイの処理は.travis.ymlの他の場所の記述とは少し違っていて、シェルスクリプトをそのまま書くわけではなく、特定のルールに従って、データを入力してあげます。

基本の書き方は以下の通り。

上から何を書いているかを見ていきます。

項目名 説明
provider リリースに使うサービスの名前です。今回はGitHub Releasesを使うので「releases」を指定。他にHerokuやAWSなども指定できます。
skip_cleanup これがfalseになっているとビルド中に作られたファイルが破棄されます。今回は特に破棄する必要もないのでtrueにしています。
api_key リリースに使うAPIのキーです。今回は先ほど生成した暗号化済みのアクセス・トークンを使います。
file リリースするファイルの一覧です。今回は先ほど生成した圧縮ファイルを指定しています。
on デプロイを行う条件を記述しています。今回の場合はタグがついていない(tag: false)、ブランチがmaster (branch: master)という条件を記述しています。このほかにもコンパイラがGCCなどの条件をcondition: “$CXX = g++”などで指定できます。

上記の条件ではmasterブランチにタグをつけずにプッシュすると、その時のコミットに指定されたタグをつけてプッシュしたのち、そのコミットをリリースします。

Travis CIで処理が完了すると、以下のようにReleaseがなされています。

deployed_releases

 

まとめ


これでめでたくGitHub Releasesへの自動デプロイができました。

もし、うまくいかないなどの不具合がありましたらコメントいただけますと嬉しいです。

最後までお読みいただきまして、ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください