デプロイメントパイプラインにおいてビルドは一度だけにすべきなのか

「継続的デリバリー」では、デプロイメントパイプラインのプラクティスとして、「バイナリをビルドするのは一度限りとせよ」と言っていて、その理由のひとつとして、チームができる限り早くフィードバックを受けられるようにすることを挙げている。パイプライン内で何度もビルドを繰り返すのは非効率というわけだ。

これを現代的に焼き直すと、Dockerイメージのビルドは一度限りで、すべてのテストはそのイメージを使って行うということになりそうだけど、それだと最初のフィードバックまでものすごく時間がかかってしまうのでやりたくないよなあ。

別の方法を取るとすると、言語ランタイムのバージョンをどうやって合わせるかと、ライブラリのバージョンをどうやって合わせるかが懸念事項になる、ライブラリは、ダウンロードしたアセットを最初に保存しておいて、後のジョブで使い回すことはできそう。パッケージキャッシュの保存は、もっぱらパフォーマンスチューニングという観点から実施される気がするけど、挙動の一貫性という観点もあったんだなあというのは、新しい気づきだ。

言語ランタイムの固定は…パッケージ記述ファイルでピンニングって一般的にできるんだっけ?できなければ、がんばって目視で一貫性維持するしかなさそう。

Taiju Muto @tai2