Dela via


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

GitHub Actions ger dig flexibiliteten att skapa ett automatiserat livscykelarbetsflöde för programvaruutveckling. 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 programutveckling 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 manifestfilen som ska användas för distributioner med Hjälp av 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å körningsplatsen. azure/setup-helm
azure/setup-kubectl Installera en specifik version av kubectl på körningsplatsen. 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 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 .

Anteckning

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 azure/login åtgärden för att använda 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örgrena.

  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 din lagringsplats.

Skapa hemligheter

  1. Skapa ett huvudnamn för tjänsten för att få åtkomst till 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äljSä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>.
    tenant Värdet för <tenantId>.
    registry 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. Skapa en .github/workflows/main.yml och klistra in följande innehåll på lagringsplatsen:

    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. Källkoden för utcheckning 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-inloggningen använder Azure-inloggningsåtgärden för att logga in på ditt Azure-konto.
    4. Ange AKS-kontext använder azure AKS-setkontextåtgärden 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 din lagringsplats.

  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.