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.
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.
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
Voici quelques scénarios courants d’utilisation de l’action. Pour plus d’informations, consultez la page Place de marché GitHub de l’action.
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
.
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.
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.
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
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. |
Avant de créer le workflow, le code source de votre application doit se trouver dans un référentiel GitHub.
Se connecter à Azure avec Azure CLI.
az login
Ensuite, installez l’extension Azure Container Apps la plus récente pour l’interface CLI.
az extension add --name containerapp --upgrade
Si vous n’avez pas votre propre référentiel GitHub, créez-en un à partir d’un exemple.
- Accédez à l’emplacement suivant pour créer un nouveau dépôt :
- Nommez votre dépôt
my-container-app
.
Clonez le référentiel sur votre ordinateur local.
git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
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.
Passez au dossier src du référentiel cloné.
cd my-container-app cd src
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
Dans la sortie de la commande, notez le nom de l’instance Azure Container Registry.
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.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.
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.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.
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.
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
.Copiez la sortie JSON à partir de la commande.
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).
Entrez
AZURE_CREDENTIALS
comme nom et collez le contenu de la sortie JSON comme valeur.Sélectionnez Ajouter un secret.
Dans le dépôt GitHub, accédez à Actions et sélectionnez New workflow (Nouveau workflow).
Sélectionnez Configurer vous-même un workflow.
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 sousbranches
et les valeurs deappSourcePath
,containerAppName
etresourceGroup
correspondent aux valeurs de votre dépôt et de vos ressources Azure.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.