2017年11月8日水曜日

[Appveyor] イメージを環境変数で指定する

今回は Appveyor で環境変数を使ったイメージの指定を紹介します。
iutest のテストでイメージごとにそれぞれ異なる環境変数を設定したかったときに、この方法に行き着きましたのでそれの紹介です。

テストではよくマトリックスを組んで複数の環境でテストをすることが多いと思います。
Appveyor なら、イメージが複数用意されているので、それぞれでテストを実行することになります。その場合はイメージを複数指定すれば OK です。
さらに環境変数を列として、イメージ×環境変数のマトリックスも組むこともできます。
さきにこちらの方法を紹介しておきます。

イメージと環境変数のマトリックス
まずイメージは「SETTINGS」「Environment」の「Build worker image」で複数設定することができます。
指定したイメージの分だけ、ジョブが実行されます。


さらに、同じく「Environment」の「Environment variables」で環境変数を指定できます。
「Add variable」だと、各イメージで共通の環境変数が設定されますが、「Add build matrix group」では環境変数のマトリックスを作成できます。


グループを追加すると「Environment variables - 1」「Environment variables - 2」のようにグループが増えていきます。
それぞれ「Add variable」から環境変数を設定できます。



テーブルにするとこんな感じです。
ENV_M valueVisual Studio 2015Visual Studio 2017
Environment variables - 111
Environment variables - 222

Visual Stduio 2015/2017 のイメージそれぞれに対して、ENV_M が 1 と 2 のジョブが実行され、計4つのジョブが実行されます。

iutest でやりたかった構成
さて、これに対して iutest でやりたかったことはこうです。
ENV_M valueVisual Studio 2015Visual Studio 2017
Environment variables - 11×
Environment variables - 2×2
※×印はジョブを実行しないという意味です
上と合わせて書きましたが、わかりやすくするとこうです。
Visual Studio 2015Visual Studio 2017
ENV_M value12
つまり、マトリックスにしたいわけではなく、イメージ対して一意な環境変数を設定したいわけです。



これができないか調べていたら、イメージのマトリックスを使わずに、「APPVEYOR_BUILD_WORKER_IMAGE」環境変数でイメージの指定ができることを知りましたので、これで解決しました。

イメージを環境変数で指定する
環境変数マトリックスでイメージを指定するので「Build worker image」は空にします。
次に、「Add build matrix group」で環境変数のグループを作成し、環境変数名「APPVEYOR_BUILD_WORKER_IMAGE」でイメージの名前を設定します。


これで実行すると「Environment variables - 1」のときだけ、イメージ設定が上書きされます。


環境変数が変わっただけでイメージが変わってないかもしれないので、以下のコマンドで確認しました。


結果、このようにイメージが変わっていることを確認。


まとめ
イメージに対して環境変数を別途指定したい場合は、環境変数のマトリックスと APPVEYOR_BUILD_WORKER_IMAGE を使うと実現できます。
イメージ×環境変数のマトリックスを組みつつ、イメージに対して個別で一意な環境変数をセットしたい場合は、APPVEYOR_BUILD_WORKER_IMAGE 環境変数を参照して判断するのが良さそうです。

マトリックス化する予定があるなら、最初から APPVEYOR_BUILD_WORKER_IMAGE を参照して分岐させるほうがいいかもしれないです。
このへんは好み、かなぁ・・・
ともあれ、APPVEYOR_BUILD_WORKER_IMAGE は ReadOnly じゃなくて Write もできるってことを覚えておくと今後役に立つかもしれません。(たぶん)


今回は以上です。では。

0 件のコメント:

コメントを投稿