Skapa, testa och distribuera containrar till Azure Kubernetes Service (AKS) med GitHub Actions

GitHub Actions ger dig flexibiliteten att skapa ett arbetsflöde för automatiserad programvaruutvecklingslivscykel. Du kan använda flera Kubernetes-åtgärder för att distribuera till containrar från Azure Container Registry (ACR) till Azure Kubernetes Service (AKS) med GitHub Actions.

Förutsättningar

GitHub Actions för AKS

Med GiHub Actions kan du automatisera dina arbetsflöden för programvaruutveckling inifrån GitHub. Mer information finns i GitHub Actions för Azure.

I följande tabell visas tillgängliga åtgärder för AKS:

Name beskrivning Mer information
azure/aks-set-context Ange AKS-målklusterkontexten för andra åtgärder som ska användas eller köra kubectl-kommandon. azure/aks-set-context
azure/k8s-set-context Ange kubernetes-målklusterkontexten för andra åtgärder som ska användas eller köra kubectl-kommandon. azure/k8s-set-context
azure/k8s-bake Baka manifestfil som ska användas för distributioner med helm, kustomize eller kompose. azure/k8s-bake
azure/k8s-create-secret Skapa en allmän hemlighet eller docker-registry-hemlighet i Kubernetes-klustret. azure/k8s-create-secret
azure/k8s-deploy Distribuera manifest till Kubernetes-kluster. azure/k8s-deploy
azure/k8s-lint Verifiera/lint dina manifestfiler. azure/k8s-lint
azure/setup-helm Installera en specifik version av Helm-binärfilen på löparen. azure/setup-helm
azure/setup-kubectl Installera en specifik version av kubectl på löparen. azure/setup-kubectl
azure/k8s-artifact-substitute Uppdatera taggen eller sammandraget för containeravbildningar. azure/k8s-artifact-substitute
azure/aks-create-action Skapa ett AKS-kluster med Terraform. azure/aks-create-action
azure/aks-github-runner Konfigurera lokalt installerade agenter för GitHub Actions. azure/aks-github-runner
azure/acr-build Skapa containrar med hjälp av ACR. azure/acr-build

Använda GitHub Actions med AKS

Du kan till exempel använda GitHub Actions för att distribuera ett program till ditt AKS-kluster varje gång en ändring skickas till din GitHub-lagringsplats. I det här exemplet används Azure Vote-programmet .

Kommentar

I det här exemplet används ett huvudnamn för tjänsten för autentisering med ditt ACR- och AKS-kluster. Du kan också konfigurera Open ID Connect (OIDC) och uppdatera åtgärden så att den azure/login använder OIDC. Mer information finns i Konfigurera Azure-inloggning med OpenID Connect-autentisering.

Förgrena och uppdatera lagringsplatsen

  1. Gå till Azure Vote-lagringsplatsen och välj Förgrening.

  2. azure-vote-all-in-one-redis.yaml Uppdatera för att använda din ACR för avbildningenazure-vote-front. Byt ut <registryName> mot namnet på ditt register.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Checka in den uppdaterade azure-vote-all-in-one-redis.yaml till lagringsplatsen.

Skapa hemligheter

  1. Skapa ett huvudnamn för tjänsten för att komma åt resursgruppen med Contributor rollen med hjälp av az ad sp create-for-rbac kommandot . Ersätt <SUBSCRIPTION_ID> med prenumerations-ID:t för ditt Azure-konto och <RESOURCE_GROUP> med namnet på resursgruppen som innehåller din ACR.

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

    Dina utdata bör se ut ungefär som följande exempelutdata:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Gå till inställningarna för GitHub-lagringsplatsen och välj Säkerhetshemligheter>och variabler>Åtgärder.

  3. För varje hemlighet väljer du Ny lagringsplatshemlighet och anger namnet och värdet för hemligheten.

    Hemligt namn Hemligt värde
    AZURE_CREDENTIALS Hela JSON-utdata från az ad sp create-for-rbac kommandot.
    service_principal Värdet för <clientId>.
    service_principal_password Värdet för <clientSecret>.
    prenumeration Värdet för <subscriptionId>.
    klientorganisation Värdet för <tenantId>.
    register Namnet på registret.
    repository azuredocs
    resource_group Namnet på resursgruppen.
    cluster_name Namnet på klustret.

Mer information om hur du skapar hemligheter finns i Krypterade hemligheter.

Skapa åtgärdsfil

  1. På lagringsplatsen skapar du en .github/workflows/main.yml och klistrar in följande innehåll:

    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 
    

    Avsnittet on innehåller händelsen som utlöser åtgärden. I exempelfilen utlöses åtgärden när en ändring skickas till azure-vote katalogen.

    Avsnittet steps innehåller varje distinkt åtgärd:

    1. Checkout-källkoden använder GitHub Actions Checkout-åtgärden för att klona lagringsplatsen.
    2. ACR-versionen använder Azure Container Registry Build Action för att skapa avbildningen och ladda upp den till registret.
    3. Azure-inloggning använder Azure-inloggningsåtgärden för att logga in på ditt Azure-konto.
    4. Ange AKS-kontext använder Azure AKS Set Context Action för att ange kontexten för ditt AKS-kluster.
    5. Installation av kubectl använder Kubectl-åtgärden för Azure AKS-installation för att installera kubectl på din löpare.
    6. Distribuera till AKS använder Azure Kubernetes Deploy Action för att distribuera programmet till ditt Kubernetes-kluster.
  2. Checka in filen på .github/workflows/main.yml lagringsplatsen.

  3. För att bekräfta att åtgärden fungerar uppdaterar azure-vote/azure-vote/config_file.cfg du med följande innehåll:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Checka in den uppdaterade azure-vote/azure-vote/config_file.cfg till lagringsplatsen.

  5. På lagringsplatsen väljer du Åtgärder och bekräftar att ett arbetsflöde körs. Bekräfta sedan att arbetsflödet har en grön bockmarkering och att det uppdaterade programmet distribueras till klustret.

Nästa steg

Granska följande startarbetsflöden för AKS. Mer information finns i Använda startarbetsflöden.