Compilare, testare e distribuire contenitori nel servizio Azure Kubernetes usando GitHub Actions

GitHub Actions offre la flessibilità necessaria per creare un flusso di lavoro automatizzato del ciclo di vita di sviluppo software. È possibile usare più azioni Kubernetes per eseguire la distribuzione nei contenitori da Registro Azure Container al servizio Azure Kubernetes con GitHub Actions.

Prerequisiti

GitHub Actions per il servizio Azure Kubernetes

GitHub Actions consente di automatizzare i flussi di lavoro dello sviluppo di software all'interno di GitHub. Per altre informazioni, vedere GitHub Actions per Azure.

Nella tabella seguente vengono elencate le azioni disponibili per AKS:

Nome Descrizione Altri dettagli
azure/aks-set-context Impostare il contesto del cluster del servizio Azure Kubernetes di destinazione per altre azioni da usare o eseguire qualsiasi comando kubectl. azure/aks-set-context
azure/k8s-set-context Impostare il contesto del cluster Kubernetes di destinazione per altre azioni da usare o eseguire qualsiasi comando kubectl. azure/k8s-set-context
azure/k8s-bake Eseguire il bake del file manifesto da usare per le distribuzioni tramite Helm, kustomize o kompose. azure/k8s-bake
azure/k8s-create-secret Creare un segreto generico o un segreto docker-registry nel cluster Kubernetes. azure/k8s-create-secret
azure/k8s-deploy Distribuire manifesti nei cluster Kubernetes. azure/k8s-deploy
azure/k8s-lint Convalidare/lint i file manifesto. azure/k8s-lint
azure/setup-helm Installare una versione specifica del file binario Helm nello strumento di esecuzione. azure/setup-helm
azure/setup-kubectl Installare una versione specifica di kubectl nel runner. azure/setup-kubectl
azure/k8s-artifact-substitute Aggiornare il tag o il digest per le immagini del contenitore. azure/k8s-artifact-substitute
azure/aks-create-action Creare un cluster del servizio Azure Kubernetes usando Terraform. azure/aks-create-action
azure/aks-github-runner Configurare agenti self-hosted per GitHub Actions. azure/aks-github-runner
azure/acr-build Compilare contenitori con Registro Azure Container. azure/acr-build

Usare GitHub Actions con il servizio Azure Kubernetes

Ad esempio, è possibile usare GitHub Actions per distribuire un'applicazione nel cluster del servizio Azure Kubernetes ogni volta che viene eseguito il push di una modifica nel repository GitHub. Questo esempio usa l'applicazione Azure Vote.

Nota

Questo esempio usa un'entità servizio per l'autenticazione con il registro Azure Container e il cluster del servizio Azure Kubernetes. In alternativa, è possibile configurare Open ID Connect (OIDC) e aggiornare l'azione azure/login per usare OIDC. Per altre informazioni, vedere Configurare l'account di accesso di Azure con l'autenticazione OpenID Connect.

Creare una copia tramite fork e aggiornare il repository

  1. Passare al repository Azure Vote e selezionare Fork.

  2. Aggiornare per usare il azure-vote-all-in-one-redis.yamlRegistro Azure Containerazure-vote-front per l'immagine. Sostituire <registryName> con il nome del registro.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Eseguire il commit dell'oggetto aggiornato azure-vote-all-in-one-redis.yaml nel repository.

Creare segreti

  1. Creare un'entità servizio per accedere al gruppo di risorse con il Contributor ruolo usando il comando az ad sp create-for-rbac. Sostituire <SUBSCRIPTION_ID> con l'ID sottoscrizione dell'account Azure e <RESOURCE_GROUP> con il nome del gruppo di risorse contenente il Registro Azure Container.

    az ad sp create-for-rbac \
        --name "ghActionAzureVote" \
        --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
        --role Contributor \
        --json-auth
    

    L'output dovrebbe essere simile all'esempio di output seguente:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Passare alle impostazioni del repository GitHub e selezionare Segreti di> sicurezza e variabili>Azioni.

  3. Per ogni segreto, selezionare Nuovo segreto repository e immettere il nome e il valore del segreto.

    Nome segreto Valore segreto
    AZURE_CREDENTIALS L'intero output JSON del comando az ad sp create-for-rbac.
    service_principal Valore di <clientId>.
    service_principal_password Valore di <clientSecret>.
    sottoscrizione Valore di <subscriptionId>.
    tenant Valore di <tenantId>.
    registry Nome del registro.
    repository azuredocs
    resource_group Nome del gruppo di risorse.
    cluster_name Nome del cluster.

Per altre informazioni sulla creazione di segreti, vedere Segreti crittografati.

Creare un file di azioni

  1. Nel repository creare un .github/workflows/main.yml e incollare il contenuto seguente:

    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 sezione on contiene l'evento che attiva l'azione. Nel file di esempio l'azione viene attivata quando viene eseguito il push di una modifica nella directory azure-vote.

    La sezione steps contiene ogni azione distinta:

    1. Il codice sorgente checkout usa le azione di checkout GitHub Actions per clonare il repository.
    2. La compilazione di Registro Azure Container usa l'azione di compilazione del Registro Azure Container per compilare l'immagine e caricarla nel registro.
    3. L'account di accesso di Azure usa l'azione di accesso di Azure per accedere all'account Azure.
    4. Impostare il contesto del servizio Azure Kubernetes usa l'azione imposta contesto del servizio Azure Kubernetes per impostare il contesto per il cluster del servizio Azure Kubernetes.
    5. Il programma di installazione di kubectl usa l'azione Kubectl di installazione del servizio Azure Kubectl per installare kubectl nello strumento di esecuzione.
    6. La distribuzione nel servizio Azure Kubernetes usa l'azione di distribuzione di Azure Kubernetes per distribuire l'applicazione nel cluster Kubernetes.
  2. Eseguire il commit del file .github/workflows/main.yml nel repository.

  3. Per verificare che l'azione funzioni, aggiornare azure-vote/azure-vote/config_file.cfg con il contenuto seguente:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Eseguire il commit dell'oggetto aggiornato azure-vote/azure-vote/config_file.cfg nel repository.

  5. Nel repository selezionare Azioni e verificare che sia in esecuzione un flusso di lavoro. Verificare quindi che il flusso di lavoro abbia un segno di spunta verde e che l'applicazione aggiornata venga distribuita nel cluster.

Passaggi successivi

Esaminare i flussi di lavoro di avvio seguenti per il servizio Azure Kubernetes. Per altre informazioni, vedere Uso dei flussi di lavoro di avvio.