Azure Pipelines:ホストされたエージェントで「No space left on device」
Microsoft がホストするエージェントのジョブは、Visual Studio や SDK などが入った新しい仮想マシンのディスクの、残りの空きで動きます。ソース コード、パッケージ、Docker のイメージ、ビルドの出力はすべてそこに入ります。尽きると、次に書き込むステップが No space left on device で失敗します。ホストされたエージェントのディスクを Microsoft が増やすことはありません。
失敗しているビルドがプルリクエストのビルド検証なら、プルリクエストはそれを待っています:JetBrains IDE のプラグイン Azure DevOps Pull Requests は、プルリクエストのブランチ ポリシーを状態つきで IntelliJ IDEA や Rider に並べ、Pro なら直しを push したあとに、失敗したビルド ポリシーをもう一度動かせます。JetBrains Marketplace で入れる
出るメッセージ
##[warning]Free disk space on / is lower than 5%; Currently used: 96.12%(/ の空きが 5% を下回った、いまの使用率、という意味)。エージェントはジョブの間ディスクを見ていて、空きがディスクの 5% 以下になるとこれを出します(しきい値はエージェントのソースの定数)。ジョブは書き込みが失敗するまで続きます。- .NET のツールなら
System.IO.IOException: No space left on device、Docker ならwrite /var/lib/docker/...: no space left on device、Node.js ならENOSPC: no space left on device。Windows のエージェントでは同じことがThere is not enough space on the disk.(ディスクに十分な空きがない)と出ます。 - エージェントが自分のログも書けないほど埋まると、代わりに We stopped hearing from agent で終わることがあります。
ホストされたエージェントのディスクの量
- Microsoft の Microsoft ホステッド エージェントの説明では、Windows と Linux のエージェントは 2 コア・RAM 7 GB・SSD 14 GB の仮想マシンで、どのエージェントにもパイプラインのための空きディスクが少なくとも 10 GB あります。
- 同じページは、ホストされたエージェントのディスクを増やす依頼には応じられないとしています。示されている道は、パイプラインを収まるように組み直すか、セルフホストのエージェント、スケール セットのエージェント、Managed DevOps Pools に移ることです。
Ubuntu のイメージで空ける
- Azure Pipelines は、GitHub Actions と同じ runner-images のリポジトリのイメージを使います。なので、大きな入りっぱなしのツール一式も同じディレクトリにあります。あとのステップで使わないものを、ジョブの最初に消します:
- script: | df -h / sudo rm -rf /usr/local/lib/android /usr/share/dotnet /opt/ghc /usr/local/.ghcup docker image prune --all --force df -h / displayName: Free disk space - ビルドに要るものは残します。Android のビルドには
/usr/local/lib/androidが、.NET のビルドには/usr/share/dotnetが要ります(UseDotNet@2のステップで SDK を入れ直すなら別です)。それぞれのディレクトリを消すとどれだけ空いたかは、こちらで測った GitHub Actions 版のこのページにあります。 - 前後の
df -h /で、毎回いくら空きがあって、片づけでいくら空いたかがログに残ります。ジョブが限界に近いかどうかが見えます。
使う量を減らす
- ビルドに要るぶんだけチェックアウトします。浅い取得(
checkoutのステップにfetchDepth: 1)なら履歴を取らず、Git LFS のファイルはlfs: trueのときだけ取ります。 - 公開し終えたものは消します。
PublishPipelineArtifact@1がフォルダーを上げたあと、それを使わないステップでそのフォルダーを消せます。 - 大きなイメージやターゲットをいくつも作るジョブは、ジョブに分けます。ジョブごとに、空きがまるごとある新しいエージェントが来ます。
- 何がディスクを埋めているかは、まだ成功している実行の終わりのほうで
du -sh $(Agent.BuildDirectory)/* | sort -hを走らせると見えます。
収まらないとき
- セルフホストのエージェント、スケール セットのエージェント、Managed DevOps Pools では、マシンとそのディスクを自分で選べます。Managed DevOps Pools はマシンの管理を Microsoft に任せたまま大きさを選べます。セルフホストのエージェントは作業フォルダーが実行の間で残るので、そちらにも片づけを入れてください。
IntelliJ IDEA と Rider で Azure DevOps のプルリクエスト
Azure DevOps Pull Requests は、JetBrains IDE 2024.1 以降と Android Studio で動く Lesstep のプラグインです。git のリモートから組織・プロジェクト・リポジトリを読み、あなたのレビュー待ちのプルリクエストを IDE のツール ウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも動きます。プルリクエストのブランチ ポリシーを状態つきで見せるので、通っていない必須のビルドがプルリクエストの隣に出ます。Pro なら、失敗したビルド ポリシーや期限の切れたビルド ポリシーをそこからもう一度動かせます。レビューの受信箱は無料、投票・コメント・完了・作成は Pro(30日の無料試用つき)。
Azure DevOps と Azure Pipelines は Microsoft Corporation の商標、Docker は Docker, Inc. の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:We stopped hearing from agent · GitHub Actions の No space left on device · Bitbucket Pipelines の No space left on device · English