kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azure Pipelines/GitHub Actionsのセルフホスト用VMイメージを作る

以前からAzure Pipelines用イメージをPackerで作る方法を公開しているレポジトリーがあったのですが、バックエンドがGitHub Actionsと共通になり、レポジトリーも移動しました。

github.com

以前のPackerというかAzure Image Builder(中身はPackerです)を使っていたレポジトリーでも試したことがあったのですが、どうも安定して作れない。Hyper-V用のイメージ作るのも結構手を入れるの大変だなぁ、と思っていのですが、レポジトリー変更と、方式も結構変わったみたいです。

実際にAzure PipelinesとGitHub ActionのHosted Imageはこれで作っている…らしいので、つかってみようとしたところ、なんとAzureRMモジュール使って書いていてびっくりしました。2020/12でサポート終わるって書いているのに。そして、AzureRMモジュール入れた環境なんてもうないよ…。

ということで、Azモジュールに書き換えた版を作ってみました。そのうち本家がやるだろうけど、PRどうしよう。

github.com

コミットはこの辺。

github.com

今実際に動かしていますが、いい感じで動いています。たぶん数時間じゃすまないレベルで時間かかるので、朝一とかで始めたほうがいいです。もしくは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には「次の次くらいで」対応予定と書かれていたんですが。

github.com