Déployer sur App Service à l’aide de GitHub Actions

Prenez en main GitHub Actions pour automatiser votre workflow et le déployer sur Azure App Service à partir de GitHub.

Prérequis

Vue d’ensemble du fichier de workflow

Un workflow est défini par un fichier YAML (.yml) situé dans le chemin /.github/workflows/ de votre dépôt. Cette définition contient les étapes et les paramètres qui composent le workflow.

Le fichier comporte trois sections :

Section Tâches
Authentification 1. Définissez un principal de service ou un profil de publication.
2. Créez un secret GitHub.
Créer 1. Configurez l’environnement.
2. Créez l’application web.
Déployer 1. Déployez l’application web.

Utiliser le centre de déploiement

Vous pouvez rapidement commencer à utiliser GitHub Actions à l’aide du centre de déploiement App Service. Ce méthode clé en main génère automatiquement un fichier de workflow basé sur votre pile d’applications et le valide dans votre référentiel GitHub dans le répertoire approprié. Pour plus d’informations, consultez Déploiement continu sur Azure App Service.

Configurer un workflow manuellement

Vous pouvez également déployer un workflow sans utiliser le centre de déploiement. Pour ce faire, vous devez d’abord générer des informations d’identification de déploiement.

Générer les informations d’identification du déploiement

La méthode recommandée pour s’authentifier auprès d’Azure App Services pour GitHub Actions se fait avec une identité managée définie par l’utilisateur, et le moyen le plus simple pour cela consiste plutôt à configurer le déploiement GitHub Actions directement dans le portail et à sélectionner l’identité managée affectée par l’utilisateur.

Remarque

L’authentification à l’aide d’une identité managée affectée par l’utilisateur est actuellement en préversion.

Vous pouvez également vous authentifier auprès d’un principal de service, d’OpenID Connect ou d’un profil de publication.

Remarque

Le profil de publication nécessite l’activation de l’authentification de base.

Un profil de publication est une information d’identification au niveau de l’application. Configurez votre profil de publication en tant que secret GitHub.

  1. Accédez à votre service d’application dans le portail Azure.

  2. Dans la page Vue d’ensemble, sélectionnez Obtenir le profil de publication.

  3. Enregistrez le fichier téléchargé. Vous utiliserez le contenu du fichier pour créer un secret GitHub.

Remarque

À compter d’octobre 2020, les applications web Linux ont besoin que le paramètre d’application WEBSITE_WEBDEPLOY_USE_SCM soit défini sur trueavant de télécharger le profil de publication. Cette condition sera supprimée ultérieurement.

Configurer le secret GitHub

Dans GitHub, accédez à votre référentiel. Sélectionnez Paramètres > Sécurité > Secrets et variables > Actions > Nouveau secret de référentiel.

Pour utiliser les informations d’identification au niveau de l’application, collez le contenu du fichier de profil de publication téléchargé dans le champ de valeur du secret. Nommez le secret AZURE_WEBAPP_PUBLISH_PROFILE.

Quand vous configurez votre workflow GitHub, vous utilisez AZURE_WEBAPP_PUBLISH_PROFILE dans l’action Déployer l’application web Azure. Par exemple :

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Configurer l’environnement

La configuration de l’environnement peut être effectuée à l’aide de l’une des actions de configuration.

Langage Action de configuration
.NET actions/setup-dotnet
ASP.NET actions/setup-dotnet
Java actions/setup-java
JavaScript actions/setup-node
Python actions/setup-python

Les exemples suivants montrent comment configurer l’environnement pour les différentes langages pris en charge :

.NET

    - name: Setup Dotnet 3.3.x
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '3.3.x'

ASP.NET

    - name: Install Nuget
      uses: nuget/setup-nuget@v1
      with:
        nuget-version: ${{ env.NUGET_VERSION}}

Java

    - name: Setup Java 1.8.x
      uses: actions/setup-java@v1
      with:
        # If your pom.xml <maven.compiler.source> version is not in 1.8.x,
        # change the Java version to match the version in pom.xml <maven.compiler.source>
        java-version: '1.8.x'

JavaScript

env:
  NODE_VERSION: '14.x'                # set this to the node version to use

jobs:
  build-and-deploy:
    name: Build and Deploy
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@main
    - name: Use Node.js ${{ env.NODE_VERSION }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ env.NODE_VERSION }}

Python

    - name: Setup Python 3.x 
      uses: actions/setup-python@v1
      with:
        python-version: 3.x

Créer l’application Web

Le processus de création d’une application web et de déploiement vers Azure App Service change en fonction du langage.

Les exemples suivants illustrent la partie du workflow qui génère l’application web, dans différents langages pris en charge.

Pour tous les langages, vous pouvez définir le répertoire racine de l’application web avec working-directory.

.NET

La variable d’environnement AZURE_WEBAPP_PACKAGE_PATH définit le chemin d’accès de votre projet d’application web.

- name: dotnet build and publish
  run: |
    dotnet restore
    dotnet build --configuration Release
    dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 

ASP.NET

Vous pouvez restaurer les dépendances NuGet et exécuter MSBuild avec run.

- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
  run: nuget restore

- name: Add msbuild to PATH
  uses: microsoft/setup-msbuild@v1.0.2

- name: Run msbuild
  run: msbuild .\SampleWebApplication.sln

Java

- name: Build with Maven
  run: mvn package --file pom.xml

JavaScript

Pour Node.js, vous pouvez définir working-directory ou changer pour le répertoire npm dans pushd.

- name: npm install, build, and test
  run: |
    npm install
    npm run build --if-present
    npm run test --if-present
  working-directory: my-app-folder # set to the folder with your app if it is not the root directory

Python

- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt

Déployer dans App Service

Pour déployer votre code dans une application App Service, utilisez l’action azure/webapps-deploy@v2. Cette action a quatre paramètres :

Paramètre Explication
app-name (Requis) Nom de l’application App Service
publish-profile (Facultatif) Publier le contenu du fichier de profil avec les secrets Web Deploy
package (Facultatif) Chemin d’accès au package ou dossier. Le chemin d’accès peut inclure *.zip, *.war, *.jar ou un dossier à déployer
slot-name (Facultatif) Entrer un emplacement existant autre que l’emplacement de production

.NET Core

Créez et déployez une application .NET Core sur Azure à l’aide d’un profil de publication Azure. L’entrée publish-profile fait référence au secret AZURE_WEBAPP_PUBLISH_PROFILE que vous avez créé précédemment.

name: .NET Core CI

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app-name    # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '3.1.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@main
      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v2
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'

ASP.NET

Générez et déployez une application ASP.NET MVC qui utilise NuGet et publish-profile pour l’authentification.

name: Deploy ASP.NET MVC App deploy to Azure Web App

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app    # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  NUGET_VERSION: '5.3.x'           # set this to the dot net version to use

jobs:
  build-and-deploy:
    runs-on: windows-latest
    steps:

    - uses: actions/checkout@main  
    
    - name: Install Nuget
      uses: nuget/setup-nuget@v1
      with:
        nuget-version: ${{ env.NUGET_VERSION}}
    - name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
      run: nuget restore
  
    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v1.0.2

    - name: Run MSBuild
      run: msbuild .\SampleWebApplication.sln
       
    - name: 'Run Azure webapp deploy action using publish profile credentials'
      uses: azure/webapps-deploy@v2
      with: 
        app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
        package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'

Java

Créez et déployez une application Java Spring sur Azure à l’aide d’un profil de publication Azure. L’entrée publish-profile fait référence au secret AZURE_WEBAPP_PUBLISH_PROFILE que vous avez créé précédemment.

name: Java CI with Maven

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Build with Maven
      run: mvn -B package --file pom.xml
      working-directory: my-app-path
    - name: Azure WebApp
      uses: Azure/webapps-deploy@v2
      with:
        app-name: my-app-name
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: my/target/*.jar

Pour déployer un war au lieu d’un jar, modifiez la valeur package.

    - name: Azure WebApp
      uses: Azure/webapps-deploy@v2
      with:
        app-name: my-app-name
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: my/target/*.war

JavaScript

Créez et déployez une application Node.js sur Azure à l’aide du profil de publication de l’application. L’entrée publish-profile fait référence au secret AZURE_WEBAPP_PUBLISH_PROFILE que vous avez créé précédemment.

# File: .github/workflows/workflow.yml
name: JavaScript CI

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app-name   # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path'      # set this to the path to your web app project, defaults to the repository root
  NODE_VERSION: '14.x'                # set this to the node version to use

jobs:
  build-and-deploy:
    name: Build and Deploy
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@main
    - name: Use Node.js ${{ env.NODE_VERSION }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ env.NODE_VERSION }}
    - name: npm install, build, and test
      run: |
        # Build and test the project, then
        # deploy to Azure Web App.
        npm install
        npm run build --if-present
        npm run test --if-present
      working-directory: my-app-path
    - name: 'Deploy to Azure WebApp'
      uses: azure/webapps-deploy@v2
      with: 
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

Python

Créez et déployez une application Python sur Azure à l’aide du profil de publication de l’application. Notez la manière dont l’entrée publish-profile fait référence au secret AZURE_WEBAPP_PUBLISH_PROFILE que vous avez créé précédemment.

name: Python CI

on:
  [push]

env:
  AZURE_WEBAPP_NAME: my-web-app # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.x
      uses: actions/setup-python@v2
      with:
        python-version: 3.x
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Building web app
      uses: azure/appservice-build@v2
    - name: Deploy web App using GH Action azure/webapps-deploy
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

Étapes suivantes

Consultez les références sur Azure GitHub Actions et les workflow :