ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

Azure Pipelines のビルド環境考察(MS Hosted Agent vs Self Hosted Agent)

f:id:masatsuna:20210318022823p:plain

ついに MS Hosted の利用制限が強化される

Azure DevOps のチームから以下の 2 件のブログポストがありました。

devblogs.microsoft.com

devblogs.microsoft.com

要約すれば以下の 2 点が言われています。

  • パブリックなプロジェクトの場合、 Azure Pipelines の MS Hosted Agent 無償利用枠を使いたいならメールせよ
  • プライベートなプロジェクトの場合、 Azure Pipelines の MS Hosted Agent 無償利用枠を原則自動付与するするが、自動付与されない場合はメールせよ

メールの送付先とか、メールに含める内容については元記事を参照してください。

なぜこんな制限が?

無償でできてしまうせいで、いろいろ悪いことを考える輩がいるようです。 雑に言えばタダでコンピューティングリソースを使えてしまうわけで、暗号解析とか仮想通貨のマイニングとか、そういった目的に無償のマシンを使われていると。 確かにこの半年くらい、 MS Hosted Agent のビルドマシンはキュー待ちがすごい増えた印象があって、こういうことだったんだなーと妙に腹落ちしました。

MS Hosted Agent をどう使うか

個人的には、 MS Hosted Agent を大規模開発では使わないようにしています。 たとえ規模が小さかったとしても、ビルド時間が手元で 40 秒以上かかるようなプロジェクトの場合は Self Hosted Agent にしています。 こういったプロジェクトの場合、単体テストの実行まで含めると、私の体感として 1 回のパイプライン実行に余裕で 5 分くらいかかってきます。 この待ち時間が微妙にストレスを与えるんですよね。

MS Hosted Agent のマシンは Standard_DS2_v2 の VM 上に展開されています。 Standard_DS2_v2 は 2 Core 7 GB メモリのマシンなので、大多数の方がローカル開発で使用しているマシンよりだいぶ貧弱です。 そういった環境を他の Azure Pipelines のユーザーと共用します。 また悪意を持っているかは別として、長時間のワークロードを実行されるケースもあります。 結果として、キューに入ったままなかなかパイプラインが実行されなかったり、ビルドパイプラインの実行にローカルマシンでのビルドと比較して長時間要したり、ということが起こるわけです。

Self Hosted Agent を用意するタイミング

同時開発者数が 10 名を超えてきたあたりから、徐々に MS Hosted Agent を使うのがしんどくなっていくように経験上思います。 以下のような兆候が見られたら、 Self Hosted Agent の導入を検討すると良いと思います。

  • ビルドパイプラインの実行待ちが増えて、キューに滞留する
  • ビルド時間が大幅に長くなり、なかなかビルドパイプラインが終わらない

Azure Pipelines は、 MS Hosted Agent のほうができることが少ないので、 MS Hosted Agent から Self Hosted Agent への移行はほとんど問題なく実施できると思います。 Self Hosted Agent の環境構築が若干めんどくさいですけどね。

ただ、公開プロジェクトで、 MS Hosted Agent を並列実行できる環境だと、ほとんど Self Hosted Agent を使うことはないと思います。 この辺は本当に使い方によるかなーという印象です。 ビルドパイプラインの状態をよく見ながら検討するべきかと思います。

Azure VM Scale Set Agent

ほかの選択肢として Azure VM Scale Set を用いた Agent もあります。 私は仕事でもこれを使ったことはありません。 たぶん今後も使うことはほとんどないと思います。

最終的に最強なのは何か

個人的におすすめするのは、適当なデスクトップマシンを購入して、そいつを Self Hosted Agent として登録することです。 VM のほうが良ければそれでもいいのですが、先述の通り、現実的な値段で物理マシンと同等以上の性能を持つ VM を用意するのは無理です。 であるならば、適当な物理マシンを Self Hosted Agent として使ったほうが、安くて性能も出せます。

ビルドマシンはサーバーである必要もありません。 安い Windows 10 や Ubuntu のマシンで良いのです。 MS Hosted Agent に不満が出てきたら、 Self Hosted Agent をお試ししてみてください。 いろいろなものが劇的に改善されると思います*1

安く済ませたいならこういったミニ PC を Self Hosted Agent として構築するのがおすすめです。


特に Deskmini シリーズはデスクトップ用の CPU ( TDP 65w まで) が使えるのが良いところです。 非常に小さいですし、組み立ても簡単ですよ。

Deskmini に組み込める最強 CPU は Core i9 10900 です。


Core i5 10500 でも十分な性能を発揮してくれると思います。 正直この辺はお値段と相談です。


デスクトップ CPU にこだわりがないのであれば、完成品で販売しているタイプのミニ PC もよいと思います。 最近よく見かけるのはレノボのミニ PC です。


モバイル PC 用の CPU を積んでいるので、プロセッサーのパワーは Deskmini と比較すると劣ると思います。 しかし、貧弱な VM よりはよほどましです。

まとめ

今回は MS Hosted Agent と Self Hosted Agent の使い分けについて個人的に思うことを書いてみました。 Azure VM Scale Set Agent はいつ使う日が来るのだろうか。

*1:あまり使わなくなってしまった古いマシンを登録するのが一番良いと思います。エンタープライズの利用の場合、適当なデスクトップマシンをレンタルするのでも良いと思います。