2日前にGoを練習するためのMItamaeを使うPackerプラグインをリリースした
ただこの時のPluginのインストール方法としてはgo get
しかなかった
もちろんそれでも良いが折角なのでGithub Releasesからバイナリで配布したい
例: https://github.com/itamae-kitchen/mitamae/releases
実現方法
今回はPackerのプラグインのところでも紹介されていた下記のクロスコンパイルを行ってくれるものを使用した
Go1.5でクロスコンパイルが出来るので、このツールは使用しなくても良いとも言えるが今回は
をしたかったので個々でスクリプトを書く手間よりもこのツールはすべてを満たしてくれるので使用した
使い方
goxcではbuildしたり圧縮したりバイナリを削除したりといったステップをタスクとして定義している
タスク一覧に関しては下記のコマンドから可能
$ goxc -help tasks
まず今回の完成系から示して順番に解説をしていきます
goxc -pv=0.0.1 \ -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" \ publish-github \ -owner=hatappi \ -repository=packer-provisioner-mitamae \ -apikey=xxxxxxxxxxxxxx \ -include="*"
順番にオプションを解説していきます
-pv はPackageVersionを指定するものでGIthub Releases上のタグになります
-archと-osでクロスコンパイル対象を指定していきます
-+tasks=clean,compile,archiveでは指定されたタスク(今回だとpublish-githubというgithub releasesにアップロードする処理タスク)の前に行うタスクを記載します
これが指定されたタスクの後にタスクを定義する場合には-tasks+==clean,compile,archiveとなります
-oでバイナリやzipやtar.gzなどのファイルを置き方を指定することが出来ます
今回 -o="{{.Dest}}{{.PS}}{{.Version}}{{.PS}}packer-provisioner-mitamae-{{.Os}}-{{.Arch}}{{.Ext}}"
だと
. └── 0.0.1 ├── github.md ├── packer-provisioner-mitamae-darwin-386 ├── packer-provisioner-mitamae-darwin-amd64 ├── packer-provisioner-mitamae-linux-386 ├── packer-provisioner-mitamae-linux-amd64 ├── packer-provisioner-mitamae_0.0.1_darwin_386.zip ├── packer-provisioner-mitamae_0.0.1_darwin_amd64.zip ├── packer-provisioner-mitamae_0.0.1_linux_386.tar.gz └── packer-provisioner-mitamae_0.0.1_linux_amd64.tar.gz
のような構造になります
publish-github以降はgithubのデプロイの際にapiを使うのでapikeyを指定したり対象リポジトリを指定します
最後の-includeに関しては何をデプロイ対象とするかでデフォルトが“.zip,.tar.gz,.deb”となっておりバイナリが含まれないのでにしています
後はコマンドが実行すると下記のリンクのように各バイナリが配置されます
後はCIからこれを出来るようにするだけですが、それはまた今度