Werckerを使ってフェーズ間のパッケージの受け渡し周りでハマった
まとめ
- パッケージを次のフェーズに渡すには
${WERCKER_OUTPUT_DIR}
ディレクトリの中に入れる ${WERCKER_OUTPUT_DIR}
の中にパッケージを入れると元のソースコード類はコピーされない${WERCKER_OUTPUT_DIR}
の中が空であれば元のソースコード類がコピーされ次のフェーズに渡される- 今回のサンプルコード一式はこちら
https://github.com/youyo/wercker-test
https://app.wercker.com/#applications/5764c96dc961d9eb3f0f515e
やりたかったこと
phase1で生成したパッケージ(今回は go build
で生成されるバイナリ)を次のphase2でデプロイというフローを作りたかった。
phase2のときにソースコードに含まれる version.go
ファイルからバージョンを取得し、デプロイに利用したかった。
とりあえずやってみる
下記 wercker.yml
を作成してとりあえずやってみた。
とりあえずやってみたら version.go
ファイルがないよーというエラーが吐かれた。
あれーと思いつつwercker.ymlにlsコマンドを仕込んだりして見てみたら確かになかった。
そこには生成されたパッケージだけが。
ググってみたらすぐにわかって、こちら解説されてた。
http://qiita.com/ngyuki/items/47a66b26e1bbf833e8c8
ビルドで $WERCKER_OUTPUT_DIR になにかが出力されていれば、デプロイではそのディレクトリの内容が $WERCKER_SOURCE_DIR にコピーされます。もし、ビルドで $WERCKER_OUTPUT_DIR が空っぽなら、ビルドの $WERCKER_SOURCE_DIR がデプロイの $WERCKER_SOURCE_DIR にコピーされます。
なーるーほーどー。
今の wercker.yml
だと go build
で作成されたバイナリしか渡らないわけで、 version.go
は次のフェーズでは存在しないわけだ。
こうやることにした
version.txt
というバージョンが書かれたファイルも ${WERCKER_OUTPUT_DIR}
に入れて渡すことにしました。
んでwercker.ymlはこうなりました。
無事 version.txt
も渡されてバージョンを得ることができました。