diff --git a/eng/pipelines/templates/jobs/build-cli.yml b/eng/pipelines/templates/jobs/build-cli.yml index 9a379bb4ba6..8eb371409f3 100644 --- a/eng/pipelines/templates/jobs/build-cli.yml +++ b/eng/pipelines/templates/jobs/build-cli.yml @@ -171,6 +171,12 @@ jobs: displayName: Publish test results condition: succeededOrFailed() + - template: /eng/pipelines/templates/steps/cleanup-disk-space.yml + parameters: + Condition: succeededOrFailed() + CleanNuGet: true + CleanDotNet: true + - task: PowerShell@2 inputs: pwsh: true @@ -200,10 +206,22 @@ jobs: workingDirectory: cli/azd displayName: Copy binary to artifact staging directory + - template: /eng/pipelines/templates/steps/cleanup-disk-space.yml + parameters: + CleanGoCache: true + CleanDocker: true + CleanSystemCaches: true + Condition: and(succeeded(), eq(variables['BuildLinuxPackages'], 'true')) + - template: /eng/pipelines/templates/steps/build-linux-packages.yml parameters: Condition: and(succeeded(), eq(variables['BuildLinuxPackages'], 'true')) + - template: /eng/pipelines/templates/steps/cleanup-disk-space.yml + parameters: + CleanDocker: true + Condition: and(succeeded(), eq(variables['BuildLinuxPackages'], 'true')) + - pwsh: New-Item -ItemType Directory -Path $(Build.ArtifactStagingDirectory)/shield -Force condition: and(succeeded(), eq(variables['SetShieldInfo'], 'true')) displayName: Create shield artifact directory diff --git a/eng/pipelines/templates/jobs/cross-build-cli.yml b/eng/pipelines/templates/jobs/cross-build-cli.yml index 1e9897d93aa..5aaae72c414 100644 --- a/eng/pipelines/templates/jobs/cross-build-cli.yml +++ b/eng/pipelines/templates/jobs/cross-build-cli.yml @@ -93,10 +93,22 @@ jobs: workingDirectory: cli/azd displayName: Copy binary to artifact staging directory + - template: /eng/pipelines/templates/steps/cleanup-disk-space.yml + parameters: + CleanGoCache: true + CleanDocker: true + CleanSystemCaches: true + Condition: and(succeeded(), eq(variables['BuildLinuxPackages'], 'true')) + - template: /eng/pipelines/templates/steps/build-linux-packages.yml parameters: Architecture: arm64 Condition: and(succeeded(), eq(variables['BuildLinuxPackages'], 'true')) + + - template: /eng/pipelines/templates/steps/cleanup-disk-space.yml + parameters: + CleanDocker: true + Condition: and(succeeded(), eq(variables['BuildLinuxPackages'], 'true')) templateContext: outputs: diff --git a/eng/pipelines/templates/stages/build-and-test.yml b/eng/pipelines/templates/stages/build-and-test.yml index 78a300cb4a6..69c777f7fab 100644 --- a/eng/pipelines/templates/stages/build-and-test.yml +++ b/eng/pipelines/templates/stages/build-and-test.yml @@ -27,6 +27,11 @@ parameters: GOOS: linux GOARCH: arm64 BuildLinuxPackages: true + # Set special temp/cache directory overrides to avoid out of space + # issues on hosted agents + DOCKER_TMPDIR: $(Agent.TempDirectory) + TMPDIR: $(Agent.TempDirectory) + GOCACHE: $(Agent.TempDirectory)/go-cache MacARM64: Pool: Azure Pipelines OSVmImage: $(MACVMIMAGE) diff --git a/eng/pipelines/templates/steps/cleanup-disk-space.yml b/eng/pipelines/templates/steps/cleanup-disk-space.yml new file mode 100644 index 00000000000..796f0a586ca --- /dev/null +++ b/eng/pipelines/templates/steps/cleanup-disk-space.yml @@ -0,0 +1,68 @@ +parameters: + - name: CleanDocker + type: boolean + default: false + - name: CleanGoCache + type: boolean + default: false + - name: CleanNuGet + type: boolean + default: false + - name: CleanDotNet + type: boolean + default: false + - name: CleanSystemCaches + type: boolean + default: false + - name: Condition + type: string + default: succeeded() + +steps: + - bash: df -h / + displayName: Disk usage (before cleanup) + condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Linux')) + continueOnError: true + + - ${{ if eq(parameters.CleanDocker, true) }}: + - bash: docker system prune -af --volumes + displayName: Cleanup Docker + condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Linux')) + continueOnError: true + + - ${{ if eq(parameters.CleanGoCache, true) }}: + - bash: | + go clean -cache + go clean -testcache + displayName: Cleanup Go cache + condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Linux')) + continueOnError: true + + - ${{ if eq(parameters.CleanNuGet, true) }}: + - bash: dotnet nuget locals all --clear + displayName: Cleanup NuGet cache + condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Linux')) + continueOnError: true + + - ${{ if eq(parameters.CleanDotNet, true) }}: + - bash: | + rm -rf /tmp/NuGetScratch + rm -rf /tmp/.dotnet + displayName: Cleanup .NET temp artifacts + condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Linux')) + continueOnError: true + + - ${{ if eq(parameters.CleanSystemCaches, true) }}: + - bash: | + sudo apt-get clean + sudo rm -rf /var/lib/apt/lists/* + sudo rm -rf /var/cache/apt/archives/* + rm -rf /tmp/go-build* + displayName: Cleanup system caches + condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Linux')) + continueOnError: true + + - bash: df -h / + displayName: Disk usage (after cleanup) + condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Linux')) + continueOnError: true