前回の記事でlaher/goxcを使ってGoをクロスコンパイルしてGithubReleasesで各プラットフォームにむけてのバイナリを配布する仕組みを作成した
ただこれを毎回のリリースでやるのは面倒なのでCIでデプロイすることにしたのが今回
CIは普段はCircleCIを使うことが多いがOSSとかみるとTravis CI使っていることが多いので今回はTravis CI使ってみた
Travis CIだとDeploy方法がいくつか用意されていてS3やらHerokuなどが自分でスクリプトをかかなくてもyaml形式で記載するTravis CIの設定ファイルに記載するだけで出来る
詳しくはこちら
このdeploymentの機能は今回の目的でもあるGitHub Releasesにリリースする仕組みも備わっているが、今回はgoxcを使ってアップロードまでやるのでTravis CIではScriptを呼び出すだけにする
デプロイ用のスクリプトに関しては下記のようなものを用意しました
goxcに指定しているオプションなどは前回の記事を参考にしてください
#!/bin/sh -ex VERSION=`echo $TRAVIS_TAG | sed -e "s/v//g"` echo "*** $VERSION deploy start ***" goxc \ -arch="386 amd64" \ -os="linux darwin" \ -+tasks=clean,compile,archive \ -o="{{.Dest}}{{.PS}}{{.Version}}{{.PS}}packer-provisioner-mitamae-{{.Os}}-{{.Arch}}{{.Ext}}" \ -resources-exclude=".go,LICENSE,README.md" \ -pv=$VERSION \ publish-github \ -owner=hatappi \ -repository=packer-provisioner-mitamae \ -apikey=$GITHUB_TOKEN \ -include="*" echo "*** $VERSION deploy end ***"
今回はgit tagをうったのをトリガーにデプロイをします
Travis CIではTRAVIS_TAG
という環境変数にgit tagが入るのでそれを使用します
後はGithub Releasesにuploadする時にAPIをたたくのでTokenが必要です
Tokenは直で書いてしまうと外に出てしまうので、Travis CIで環境変数として定義します
設定自体は https://travis-ci.org/[githubのowner or organaizer]/[githubのリポジトリ]/settingsの下記から設定することが出来ます
ここで注意しないといけいないのが、Travis CIで流れるログは第三者からも見られるので今回のトークンのように見られてはいけないような情報は設定時にDisplay value in build logがOFFになっていることを確認します
これを設定しておけばログ上では下記のように[secure]
と表示されます
後はTravis CIの設定ファイルを作成します
language: go install: - make dependency deploy: provider: script script: sh script/travisci/deploy.sh skip_cleanup: true on: tags: true all_branches: true
基本的にはScript Deployのdocを参考にすれば出来ます
on: tags: true all_branches: true
これを追記することでタグをうった時だけデプロイ処理が走るようになります