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

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

  1. Accédez au référentiel Azure Vote, puis sélectionnez Dupliquer.

  2. Mettez à jour le fichier azure-vote-all-in-one-redis.yaml pour utiliser votre registre ACR pour l’image azure-vote-front. Remplacez <registryName> par le nom de votre registre.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Validez le fichier azure-vote-all-in-one-redis.yaml mis à jour dans votre référentiel.

Créer des secrets

  1. Créez un principal de service pour accéder à votre groupe de ressources avec le rôle Contributor à l’aide de la commande az 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>,
      ...
    }
    
  2. Accédez aux paramètres de votre référentiel GitHub et sélectionnez Sécurité>Secrets et variables>Actions.

  3. 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

  1. 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épertoire azure-vote.

    La section steps contient chaque action distincte :

    1. Valider le code source utilise l’action de validation de GitHub Actions pour cloner le référentiel.
    2. 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.
    3. La connexion Azure utilise l’action de connexion Azure pour vous connecter à votre compte Azure.
    4. 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.
    5. Configurer kubectl utilise l’action de configuration de Kubectl d’Azure AKS pour installer kubectl sur votre exécuteur.
    6. Déployer sur AKS utilise l’action de déploiement d’Azure Kubernetes pour déployer l’application sur votre cluster Kubernetes.
  2. Validez le fichier .github/workflows/main.yml dans votre référentiel.

  3. 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'
    
  4. Validez le fichier azure-vote/azure-vote/config_file.cfg mis à jour dans votre référentiel.

  5. 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.