Créer, tester et déployer des conteneurs sur Azure Kubernetes Service (AKS) à l’aide de GitHub Actions
GitHub Actions vous donne la possibilité de créer un flux de travail de cycle de vie de développement logiciel automatisé. Vous pouvez utiliser plusieurs actions Kubernetes pour déployer des conteneurs d’Azure Container Registry (ACR) sur Azure Kubernetes Service (AKS) avec GitHub Actions.
Prérequis
- Compte Azure avec un abonnement actif. Si vous n’en avez pas un, créez un compte gratuitement.
- Un compte GitHub. Si vous n’en avez pas, inscrivez-vous gratuitement.
- Lorsque vous utilisez GitHub Actions, vous devez configurer l’intégration entre Azure et votre référentiel GitHub. Pour configurer l’intégration, consultez l’article Utiliser GitHub Actions pour se connecter à Azure.
- Un cluster AKS existant avec un registre ACR attaché. Si vous n’en avez pas, consultez l’article S’authentifier auprès d’ACR à partir d’AKS.
GitHub Actions pour AKS
Grâce à GitHub Actions, vous pouvez automatiser vos workflows de développement de logiciel à partir de GitHub. Pour plus d’informations, consultez l’article GitHub Actions pour Azure.
Le tableau ci-dessous répertorie les actions disponibles pour AKS :
Nom | Description | En savoir plus |
---|---|---|
azure/aks-set-context |
Définissez le contexte de cluster AKS cible pour les autres actions à utiliser ou pour exécuter des commandes kubectl. | azure/aks-set-context |
azure/k8s-set-context |
Définissez le contexte de cluster Kubernetes cible pour les autres actions à utiliser ou pour exécuter des commandes kubectl. | azure/k8s-set-context |
azure/k8s-bake |
Effectuez un bake du fichier manifeste à utiliser pour les déploiements à l’aide de Helm, kustomize ou kompose. | azure/k8s-bake |
azure/k8s-create-secret |
Créez un secret générique ou un secret docker-registre dans le cluster Kubernetes. | azure/k8s-create-secret |
azure/k8s-deploy |
Effectuez un bake et déployez des manifestes sur des clusters Kubernetes. | azure/k8s-deploy |
azure/k8s-lint |
Validez/lint vos fichiers manifestes. | azure/k8s-lint |
azure/setup-helm |
Installez une version spécifique du fichier binaire Helm sur l’exécuteur. | azure/setup-helm |
azure/setup-kubectl |
Installez une version spécifique de kubectl sur l’exécuteur. | azure/setup-kubectl |
azure/k8s-artifact-substitute |
Mettez à jour la balise ou la synthèse pour les images conteneur. | azure/k8s-artifact-substitute |
azure/aks-create-action |
Créez un cluster AKS à l’aide de Terraform. | azure/aks-create-action |
azure/aks-github-runner |
Configurez des agents auto-hébergés pour GitHub Actions. | azure/aks-github-runner |
azure/acr-build |
Générez des conteneurs à l’aide d’ACR. | azure/acr-build |
Utiliser GitHub Actions avec AKS
Par exemple, vous pouvez utiliser GitHub Actions pour déployer une application sur votre cluster AKS chaque fois qu’une modification est envoyée (push) à votre référentiel GitHub. Cet exemple utilise l’application Azure Vote.
Notes
Cet exemple utilise un principal de service pour l’authentification avec votre instance ACR et votre cluster AKS. Vous pouvez également configurer Open ID Connect (OIDC) et mettre à jour l’action azure/login
pour utiliser OIDC. Pour plus d’informations, consultez la section Configurer Azure Login avec l’authentification OpenID Connect.
Dupliquer (fork) et mettre à jour le référentiel
Accédez au référentiel Azure Vote, puis sélectionnez Dupliquer.
Mettez à jour le fichier
azure-vote-all-in-one-redis.yaml
pour utiliser votre registre ACR pour l’imageazure-vote-front
. Remplacez<registryName>
par le nom de votre registre.... containers: - name: azure-vote-front image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1 ...
Validez le fichier
azure-vote-all-in-one-redis.yaml
mis à jour dans votre référentiel.
Créer des secrets
Créez un principal de service pour accéder à votre groupe de ressources avec le rôle
Contributor
à l’aide de la commandeaz ad sp create-for-rbac
. Remplacez<SUBSCRIPTION_ID>
par l’ID d’abonnement de votre compte Azure et<RESOURCE_GROUP>
par le nom du groupe de ressources contenant votre registre ACR.az ad sp create-for-rbac \ --name "ghActionAzureVote" \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \ --role Contributor \ --json-auth
Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :
{ "clientId": <clientId>, "clientSecret": <clientSecret>, "subscriptionId": <subscriptionId>, "tenantId": <tenantId>, ... }
Accédez aux paramètres de votre référentiel GitHub et sélectionnez Sécurité>Secrets et variables>Actions.
Pour chaque secret, sélectionnez Nouveau secret de référentiel, puis entrez le nom et la valeur du secret.
Nom du secret Valeur du secret AZURE_CREDENTIALS Sortie JSON entière de la commande az ad sp create-for-rbac
.service_principal la valeur de la propriété <clientId>
;service_principal_password la valeur de la propriété <clientSecret>
;abonnement la valeur de la propriété <subscriptionId>
;tenant la valeur de la propriété <tenantId>
;Registre Nom de votre registre. repository azuredocs resource_group Nom de votre groupe de ressources. nom_cluster Nom de votre cluster.
Pour plus d’informations sur la création de secrets, consultez la section Secrets chiffrés.
Créer un fichier d’actions
Dans votre référentiel, créez un fichier
.github/workflows/main.yml
et collez le contenu suivant :name: build_deploy_aks on: push: paths: - "azure-vote/**" jobs: build: runs-on: ubuntu-latest steps: - name: Checkout source code uses: actions/checkout@v3 - name: ACR build id: build-push-acr uses: azure/acr-build@v1 with: service_principal: ${{ secrets.service_principal }} service_principal_password: ${{ secrets.service_principal_password }} tenant: ${{ secrets.tenant }} registry: ${{ secrets.registry }} repository: ${{ secrets.repository }} image: azure-vote-front folder: azure-vote branch: master tag: ${{ github.sha }} - name: Azure login id: login uses: azure/login@v1.4.3 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Set AKS context id: set-context uses: azure/aks-set-context@v3 with: resource-group: '${{ secrets.resource_group }}' cluster-name: '${{ secrets.cluster_name }}' - name: Setup kubectl id: install-kubectl uses: azure/setup-kubectl@v3 - name: Deploy to AKS id: deploy-aks uses: Azure/k8s-deploy@v4 with: namespace: 'default' manifests: | azure-vote-all-in-one-redis.yaml images: '${{ secrets.registry }}.azurecr.io/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}' pull-images: false
La section
on
contient l’événement qui déclenche l’action. Dans l’exemple de fichier, l’action est déclenchée quand une modification est envoyée (push) au répertoireazure-vote
.La section
steps
contient chaque action distincte :- Valider le code source utilise l’action de validation de GitHub Actions pour cloner le référentiel.
- La build ACR utilise l’action de génération d’Azure Container Registry pour générer l’image et la charger dans votre registre.
- La connexion Azure utilise l’action de connexion Azure pour vous connecter à votre compte Azure.
- Définir le contexte AKS utilise l’action de définition du contexte d’Azure AKS pour définir le contexte de votre cluster AKS.
- Configurer kubectl utilise l’action de configuration de Kubectl d’Azure AKS pour installer kubectl sur votre exécuteur.
- Déployer sur AKS utilise l’action de déploiement d’Azure Kubernetes pour déployer l’application sur votre cluster Kubernetes.
Validez le fichier
.github/workflows/main.yml
dans votre référentiel.Pour confirmer que l’action fonctionne, mettez à jour le fichier
azure-vote/azure-vote/config_file.cfg
avec le contenu suivant :# UI Configurations TITLE = 'Azure Voting App' VOTE1VALUE = 'Fish' VOTE2VALUE = 'Dogs' SHOWHOST = 'false'
Validez le fichier
azure-vote/azure-vote/config_file.cfg
mis à jour dans votre référentiel.Dans votre référentiel, sélectionnez Actions et vérifiez qu’un workflow est en cours d’exécution. Ensuite, vérifiez que le workflow est associé à une coche verte et que l’application mise à jour est déployée sur votre cluster.
Étapes suivantes
Passez en revue les workflows de démarrage suivants pour AKS. Pour plus d’informations, consultez la rubrique Utilisation de workflows de démarrage.
Azure Kubernetes Service