Search code examples
azuregithubazure-web-app-servicestoragetemp

Automatically clear the Azure App Service Temp folder after deploy


Im using an Azure App Service for my ASP.NET project with the Shared tier plan, this has only 1GB of temp files allowed.

I use github actions to deploy my app to azure, each deployment create and store a zip file in the temp folder of my web app. After a few deployments my temp storage quota is full and I can't deploy anymore to my app, I get a 500 error.

The workaround is to manually delete the temp folder or restart the app (which clear the temp files) but this defeat the purpose of a CI/CD pipeline.

It is possible to automatically clear the temp folder files after every deployment?

Edit: My github workflow

name: Build and deploy to Staging

env:
  AZURE_WEBAPP_NAME: AppName    # set this to the name of your Azure Web App
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '7.0.*'                 # set this to the .NET Core version to use

on:
  push:
    branches: [ "Staging" ]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Set up dependency caching for faster builds
        uses: actions/cache@v3
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget-
      - name: Build with dotnet
        run: dotnet build --configuration Release

      - name: dotnet publish
        run: dotnet publish -c Release /p:PublishDir=${{env.DOTNET_ROOT}}/myapp

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v3
        with:
          name: .net-app
          path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    permissions:
      contents: none
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Staging'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: .net-app

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE_STAGING }}
          package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

Solution

  • I resolved my issue by using a post deployment action hook with a .bat file containing :

    set folder="C:\path\to\your\dir"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)