しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

AWS CodeBuild が Windows に対応したらしいので試した

Twitter を眺めていたら AWS CodeBuild が一部のリージョンで Windows に対応したとあったので、早速オレゴンで試して見ることにしました。

Windows が使えるビルドサービスは VSTS か AppVeyor ぐらいしか選択肢がなかったので貴重です。

AWS CodeBuild Adds Support for Windows Builds

Microsoft Windows Samples for AWS CodeBuild - AWS CodeBuild

buildspec.yml は特に Windows だから変わっている部分はないみたいです。新しいビルドプロジェクトを作成する時に OS や利用するランタイムを選べるようになっています。

AWS 管理のイメージも用意されていますが、Docker Hub で公開されている任意のイメージも利用できるようになっているみたいです。これは地味に良さそう。

f:id:shiba-yan:20180527152305p:plain

ビルドした結果は S3 に保存できるので、結構扱いやすいです。実際に ASP.NET アプリケーションをビルドして、WebDeploy パッケージを作成してみましたが、すんなりと S3 に保存されてました。

f:id:shiba-yan:20180527204658p:plain

試した感じでは、まだコンテナを利用した Windows アプリのビルド環境が未成熟という印象を持ちましたが、AppVeyor の地位危うしという感じがします。

やはり毎回 init で必要なパッケージをインストールしたりするのは時間の無駄ですからね。

f:id:shiba-yan:20180527210045p:plain

CodeBuild の場合は利用するコンピューティングタイプを選択できるのも良いです。Windows Containers 自体が重いのもありますが、選択肢があるというのは重要です。

CodeBuild 提供の Windows イメージ

CodeBuild で提供されているイメージは msbuild へのパスが通っていないので、そのままだとビルドが通らないので地味に厄介です。フルパスで msbuild を指定しないとエラーになります。

f:id:shiba-yan:20180527152338p:plain

ライセンス情報を見る感じでは .NET 4.6.2 までしか Targeting Pack が入っていないみたいなので、4.7 以降をターゲットにしたアプリケーションはビルド出来ないかも知れません。

AWS CodeBuild for Windows—Third Party Notices - AWS CodeBuild

.NET Core についても、パッと見た感じでは 2.0 しか SDK が入っていないように見えます。

それ以外のバージョンをビルドする場合には専用の Docker Image を用意するか、Microsoft から公式リリースされているものを使った方が良さそうです。

.NET Command Line Tools (2.1.103)

Product Information:
 Version:            2.1.103
 Commit SHA-1 hash:  60218cecb5

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.14393
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\2.1.103\

Microsoft .NET Core Shared Framework Host
  Version  : 2.0.6
  Build    : 74b1c703813c8910df5b96f304b0f2b78cdf194d

.NET Core の場合は Nano Server ベースのイメージを使えるのでプロビジョニングの短縮が図れます。

カスタムイメージを作成する

Microsoft から提供されているイメージは何故か WebBuildTools がインストールされていないので、ASP.NET アプリケーションのビルドには微妙に問題が出ます。

予めパッケージをインストールしておきたいという要望もあるはずなので、AWS Blog に書いてあるようにカスタムなイメージを作成して対応しましょう。

Extending AWS CodeBuild with Custom Build Environments for the .NET Framework | AWS DevOps Blog

こっちはちゃんと WebBuildTools をインストールするコマンドになっているので、ASP.NET アプリケーションのビルドも問題ありません。

pull されたイメージはキャッシュされる

条件はよくわかっていませんが、同じイメージを使っている場合にはキャッシュが効いて素早くビルドまで実行できるようになっていました。

単純に同じホストに割り当てられた場合のみなんでしょうが、Server Core のイメージは重いので重要です。

f:id:shiba-yan:20180527160521p:plain

欲を言えば、予めよく使われそうなイメージは pull 済みになっておいて欲しいですね。

LTSC 2016 のみ実行可能

.NET Framework SDK の Docker Image は LTSC 2016 以外に 1709 / 1803 が提供されているので、そのイメージを利用してビルドを実行してみましたが、コンテナが立ち上がることなく失敗しました。

f:id:shiba-yan:20180527155527p:plain

なので Hyper-V Containers ではなくて Windows Server Containers を利用していることが分かります。

軽量化された Docker Image は CodeBuild では暫く使えそうにないですね。残念ながら Windows Server 2019 のリリースを待つしかなさそうです。