Déployer sur Azure Container Apps avec GitHub Actions

Azure Container Apps vous permet d’utiliser GitHub Actions pour publier des révisions sur votre application de conteneur. Quand des commits sont envoyés (push) à votre dépôt GitHub, un workflow est déclenché et met à jour l’image conteneur dans le registre de conteneurs. Azure Container Apps crée une révision basée sur l’image conteneur mise à jour.

Les modifications apportées à un référentiel GitHub déclenchent une action pour créer une nouvelle révision.

Le workflow GitHub Actions est déclenché par les commits dans une branche spécifique de votre dépôt. Quand vous créez le workflow, vous déterminez la branche qui le déclenche.

Cet article vous montre comment créer un workflow entièrement personnalisable. Pour générer un workflow GitHub Actions de démarrage avec Azure CLI, consultez Générer un workflow GitHub Actions avec Azure CLI.

Action GitHub Azure Container Apps

Pour créer et déployer votre application conteneur, vous ajoutez l’action azure/container-apps-deploy-action à votre workflow GitHub Actions.

L’action prend en charge les scénarios suivants :

  • Générer à partir d’un Dockerfile et déployer sur Container Apps
  • Générer à partir de code source sans Dockerfile et déployer sur Container Apps Les langages pris en charge incluent .NET, Java, Node.js, PHP et Python.
  • Déployez une image conteneur existante sur Container Apps

Exemples d'utilisation

Voici quelques scénarios courants d’utilisation de l’action. Pour plus d’informations, consultez la page Place de marché GitHub de l’action.

Générer et déployer sur Container Apps

L’extrait de code suivant montre comment créer une image conteneur à partir du code source et la déployer sur Container Apps.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

L’action utilise le Dockerfile dans appSourcePath pour générer l’image conteneur. Si aucun Dockerfile n’est trouvé, l’action tente de générer l’image conteneur à partir du code source dans appSourcePath.

Déployez une image conteneur existante sur Container Apps

L’extrait de code suivant montre comment déployer une image conteneur existante dans Container Apps.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Important

Si vous créez une image conteneur dans une étape distincte, assurez-vous d’utiliser une balise unique comme le SHA du commit au lieu d’une balise stable comme latest. Pour plus d’informations, consultez Bonnes pratiques en matière de balise d’image.

Authentification avec Azure Container Registry

L’action Azure Container Apps doit s’authentifier auprès de votre instance Azure Container Registry pour envoyer (push) l’image conteneur. L’application conteneur doit également s’authentifier auprès de votre instance Azure Container Registry pour tirer l’image conteneur.

Pour envoyer (push) des images, l’action s’authentifie automatiquement auprès du registre de conteneurs spécifié dans acrName à l’aide des informations d’identification fournies à l’action azure/login.

Pour extraire des images, Azure Container Apps utilise une identité managée (recommandé) ou des informations d’identification d’administrateur pour s’authentifier auprès de l’instance Azure Container Registry. Pour utiliser une identité managée, l’application conteneur que l’action déploie doit être configurée pour utiliser une identité managée. Pour s’authentifier avec les informations d’identification d’administrateur du registre, définissez les entrées acrUsername et acrPassword de l’action.

Configuration

Vous effectuez les étapes suivantes pour configurer un workflow GitHub Actions à déployer sur Azure Container Apps.

  • Créer un dépôt GitHub pour votre application
  • Créer une application conteneur avec l’identité managée activée
  • Attribuer le rôle AcrPull pour Azure Container Registry à l’identité managée de l’application conteneur
  • Configurer des secrets dans votre dépôt GitHub
  • Créer un workflow GitHub Actions

Prérequis

Condition requise Instructions
Compte Azure Si vous n’en avez pas un, créez un compte gratuitement. Vous avez besoin de l’autorisation Contributeur ou Propriétaire sur l’abonnement Azure pour continuer. Pour plus d’informations, consultez Attribuer des rôles Azure à l’aide du portail Azure.
Compte GitHub Inscrivez-vous gratuitement.
Azure CLI Installez Azure CLI.

Créer un dépôt GitHub et cloner du code source

Avant de créer le workflow, le code source de votre application doit se trouver dans un référentiel GitHub.

  1. Se connecter à Azure avec Azure CLI.

    az login
    
  2. Ensuite, installez l’extension Azure Container Apps la plus récente pour l’interface CLI.

    az extension add --name containerapp --upgrade
    
  3. Si vous n’avez pas votre propre référentiel GitHub, créez-en un à partir d’un exemple.

    1. Accédez à l’emplacement suivant pour créer un nouveau dépôt :
    2. Nommez votre dépôt my-container-app.
  4. Clonez le référentiel sur votre ordinateur local.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

Créer une application conteneur avec l’identité managée activée

Créez votre application conteneur à l’aide de la commande az containerapp up en effectuant les étapes suivantes. Cette commande crée des ressources Azure, génère l’image conteneur, stocke l’image dans un registre et la déploie dans une application conteneur.

Une fois votre application créée, vous pouvez ajouter une identité managée à l’application et lui attribuer le rôle AcrPull pour permettre à l’identité de tirer des images du registre.

  1. Passez au dossier src du référentiel cloné.

    cd my-container-app
    cd src
    
  2. Créez des ressources Azure et déployez une application conteneur avec la commande az containerapp up.

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. Dans la sortie de la commande, notez le nom de l’instance Azure Container Registry.

  4. Récupérez l’ID de ressource complet du registre de conteneurs.

    az acr show --name <ACR_NAME> --query id --output tsv
    

    Remplacez <ACR_NAME> par le nom de votre registre.

  5. Activez l’identité managée pour l’application conteneur.

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    Notez l’ID principal de l’identité managée dans la sortie de la commande.

  6. Attribuez le rôle AcrPull de l’instance Azure Container Registry à l’identité managée de l’application conteneur.

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    Remplacez <MANAGED_IDENTITY_PRINCIPAL_ID> par l’ID principal de l’identité managée et <ACR_RESOURCE_ID> par l’ID de ressource d’Azure Container Registry.

  7. Configurez l’application conteneur pour utiliser l’identité managée afin de tirer des images d’Azure Container Registry.

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    Remplacer <ACR_NAME> par le nom de votre registre Azure Container Registry.

Configurer des secrets dans votre dépôt GitHub

Le workflow GitHub nécessite un secret nommé AZURE_CREDENTIALS pour s’authentifier auprès d’Azure. Le secret contient les informations d’identification d’un principal de service doté du rôle Contributeur sur le groupe de ressources contenant l’application conteneur et le registre de conteneurs.

  1. Créez un principal de service doté du rôle Contributeur sur le groupe de ressources qui contient l’application conteneur et le registre de conteneurs.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Remplacez <SUBSCRIPTION_ID> par l’ID de votre abonnement Azure. Si votre registre de conteneurs se trouve dans un autre groupe de ressources, spécifiez les deux groupes de ressources dans le paramètre --scopes.

  2. Copiez la sortie JSON à partir de la commande.

  3. Dans le dépôt GitHub, accédez à Settings (Paramètres)>Secrets>Actions, puis sélectionnez New repository secret (Nouveau secret de dépôt).

  4. Entrez AZURE_CREDENTIALS comme nom et collez le contenu de la sortie JSON comme valeur.

  5. Sélectionnez Ajouter un secret.

Créer un workflow GitHub Actions

  1. Dans le dépôt GitHub, accédez à Actions et sélectionnez New workflow (Nouveau workflow).

  2. Sélectionnez Configurer vous-même un workflow.

  3. Collez le code YAML suivant dans l’éditeur.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Remplacer <ACR_NAME> par le nom de votre registre Azure Container Registry. Vérifiez que le nom de la branche sous branches et les valeurs de appSourcePath, containerAppName et resourceGroup correspondent aux valeurs de votre dépôt et de vos ressources Azure.

  4. Commitez les changements dans la branche primaire.

Une exécution de workflow GitHub Actions doit commencer à se générer et à déployer votre application conteneur. Pour vérifier sa progression, accédez à Actions.

Pour déployer une nouvelle révision de votre application, envoyez (push) un nouveau commit à la branche primaire.