以前からAzure Pipelines用イメージをPackerで作る方法を公開しているレポジトリーがあったのですが、バックエンドがGitHub Actionsと共通になり、レポジトリーも移動しました。
以前のPackerというかAzure Image Builder(中身はPackerです)を使っていたレポジトリーでも試したことがあったのですが、どうも安定して作れない。Hyper-V用のイメージ作るのも結構手を入れるの大変だなぁ、と思っていのですが、レポジトリー変更と、方式も結構変わったみたいです。
実際にAzure PipelinesとGitHub ActionのHosted Imageはこれで作っている…らしいので、つかってみようとしたところ、なんとAzureRMモジュール使って書いていてびっくりしました。2020/12でサポート終わるって書いているのに。そして、AzureRMモジュール入れた環境なんてもうないよ…。
ということで、Azモジュールに書き換えた版を作ってみました。そのうち本家がやるだろうけど、PRどうしよう。
コミットはこの辺。
今実際に動かしていますが、いい感じで動いています。たぶん数時間じゃすまないレベルで時間かかるので、朝一とかで始めたほうがいいです。もしくはAzureのVMで動かすとか。これでうまくいけばイメージをカスタムして不要なものを消したイメージ作って、手元のローカルで動かすような感じでやってみようと思います。
ヘルプに書いていますが、使用方法の注意点として、なぜかGitHubのPATが必要です。将来廃止しますとは書かれていますが、GitHub Developer Programに参加しないとPAT作れない(前確か参加しなくても作れたよね?)ので、気を付けてください。とりあえずレポジトリーの権限だけ設定しています。
(追記)
必要な理由がわかりました。npmのパッケージをGitHubのPackagesからダウンロードするため、read:packages
が必要なためだそうです(今エラーになりました)。たぶん匿名アクセスを許可していないからでしょう。read:packages
権限だけあればいいようです。
GenerateResourcesAndImage -SubscriptionId {サブスクリプションID} -ResourceGroupName {リソースグループ名} -ImageGenerationRepositoryRoot {レポジトリーをクローンしたフォルダー} -ImageType {イメージ名} -AzureLocation リージョン -Githubfeedtoken {GitHubのPAT}
-ImageType
にはWindows2016
, Windows2019
, Ubuntu1604
,Ubuntu1804
が指定できます。イメージ生成が成功したら、Azureのストレージアカウントに入るので、そこからAzureへデプロイできます。
これでうまくいったら、hostedからは不要なものを削除するとか、hostedでは更新が遅い場合に最新のVisual Studio入れたイメージ作るとかいろいろ用途が広がります。もちろん、オンプレミスのAzure DevOps用にも使えますね。
(追記2)
作ってみたら、Seleniumのダウンロードで失敗してました。WebブサウザーでダウンロードしようとしたらSmartScreenに引っかかったので、おそらくそれでしょうか。つっても、PowerShellスクリプトと同じ方法でダウンロードしてみたらできたんですが。うーん、こう言う安定しないの困るな。
後、現時点でPackerがAzureのスポットインスタンスに対応していない(AWSは対応しています)ので、USあたりでイメージ作成するときにお安く作れないの困るなぁ。5月ごろのissueには「次の次くらいで」対応予定と書かれていたんですが。