Containers bouwen, testen en implementeren in Azure Kubernetes Service (AKS) met behulp van GitHub Actions

GitHub Actions biedt u de flexibiliteit om een geautomatiseerde werkstroom voor de levenscyclus van softwareontwikkeling te bouwen. U kunt meerdere Kubernetes-acties gebruiken om te implementeren in containers van Azure Container Registry (ACR) naar Azure Kubernetes Service (AKS) met GitHub Actions.

Vereisten

GitHub Actions voor AKS

Met GiHub Actions kunt u uw werkstromen voor softwareontwikkeling automatiseren vanuit GitHub. Zie GitHub Actions voor Azure voor meer informatie.

De volgende tabel bevat de beschikbare acties voor AKS:

Naam Beschrijving Meer informatie
azure/aks-set-context Stel de doel-AKS-clustercontext in voor andere acties om kubectl-opdrachten te gebruiken of uit te voeren. azure/aks-set-context
azure/k8s-set-context Stel de kubernetes-doelclustercontext in voor andere acties om kubectl-opdrachten te gebruiken of uit te voeren. azure/k8s-set-context
azure/k8s-bake Bak een manifestbestand dat u wilt gebruiken voor implementaties met behulp van Helm, kustomize of kompose. azure/k8s-bake
azure/k8s-create-secret Maak een algemeen geheim of docker-registry-geheim in het Kubernetes-cluster. azure/k8s-create-secret
azure/k8s-deploy Manifesten implementeren in Kubernetes-clusters. azure/k8s-deploy
azure/k8s-lint Valideer/lint uw manifestbestanden. azure/k8s-lint
azure/setup-helm Installeer een specifieke versie van het binaire Helm-bestand op de runner. azure/setup-helm
azure/setup-kubectl Installeer een specifieke versie van kubectl op de runner. azure/setup-kubectl
azure/k8s-artifact-substitute Werk de tag of samenvatting voor containerinstallatiekopieën bij. azure/k8s-artifact-substitute
azure/aks-create-action Maak een AKS-cluster met behulp van Terraform. azure/aks-create-action
azure/aks-github-runner Stel zelf-hostende agents in voor GitHub Actions. azure/aks-github-runner
azure/acr-build Bouw containers met behulp van ACR. azure/acr-build

GitHub Actions gebruiken met AKS

U kunt bijvoorbeeld GitHub Actions gebruiken om een toepassing in uw AKS-cluster te implementeren telkens wanneer een wijziging naar uw GitHub-opslagplaats wordt gepusht. In dit voorbeeld wordt de Azure Vote-toepassing gebruikt.

Notitie

In dit voorbeeld wordt een service-principal gebruikt voor verificatie met uw ACR- en AKS-cluster. U kunt ook OIDC (Open ID Connect) configureren en de azure/login actie bijwerken om OIDC te gebruiken. Zie Azure-aanmelding instellen met OpenID Connect-verificatie voor meer informatie.

De opslagplaats splitsen en bijwerken

  1. Navigeer naar de Azure Vote-opslagplaats en selecteer Fork.

  2. Werk de azure-vote-all-in-one-redis.yaml bij om uw ACR voor de azure-vote-front installatiekopieën te gebruiken. Vervang <registryName> door de naam van uw register.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Voer de bijgewerkte door azure-vote-all-in-one-redis.yaml in uw opslagplaats.

Geheimen maken

  1. Maak een service-principal voor toegang tot uw resourcegroep met de Contributor rol met behulp van de az ad sp create-for-rbac opdracht . Vervang door de abonnements-id <SUBSCRIPTION_ID> van uw Azure-account en <RESOURCE_GROUP> door de naam van de resourcegroep die uw ACR bevat.

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

    De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Navigeer naar de instellingen van uw GitHub-opslagplaats en selecteerBeveiligingsgeheimen> en variabelen >Acties.

  3. Selecteer voor elk geheim Nieuwe opslagplaatsgeheim en voer de naam en waarde van het geheim in.

    Geheime naam Geheime waarde
    AZURE_CREDENTIALS De volledige JSON-uitvoer van de az ad sp create-for-rbac opdracht.
    service_principal De waarde van <clientId>.
    service_principal_password De waarde van <clientSecret>.
    abonnement De waarde van <subscriptionId>.
    tenant De waarde van <tenantId>.
    registry De naam van het register.
    repository azuredocs
    resource_group De naam van uw resourcegroep.
    cluster_name De naam van uw cluster.

Zie Versleutelde geheimen voor meer informatie over het maken van geheimen.

Actiebestand maken

  1. Maak een .github/workflows/main.yml in de opslagplaats en plak de volgende inhoud:

    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 
    

    De on sectie bevat de gebeurtenis die de actie activeert. In het voorbeeldbestand wordt de actie geactiveerd wanneer een wijziging naar de azure-vote map wordt gepusht.

    De steps sectie bevat elke afzonderlijke actie:

    1. De broncode voor uitchecken maakt gebruik van de GitHub Actions Actie Uitchecken om de opslagplaats te klonen.
    2. ACR-build maakt gebruik van de Azure Container Registry Actie Bouwen om de installatiekopieën te bouwen en te uploaden naar uw register.
    3. Azure-aanmelding maakt gebruik van de Azure-aanmeldingsactie om u aan te melden bij uw Azure-account.
    4. AKS-context instellen maakt gebruik van de Azure AKS-actie Context instellen om de context voor uw AKS-cluster in te stellen.
    5. Setup kubectl maakt gebruik van de Azure AKS Setup Kubectl Action om kubectl te installeren op uw runner.
    6. Implementeren in AKS maakt gebruik van de Azure Kubernetes Deploy Action om de toepassing te implementeren in uw Kubernetes-cluster.
  2. Voer het .github/workflows/main.yml bestand door in uw opslagplaats.

  3. Als u wilt controleren of de actie werkt, werkt u de azure-vote/azure-vote/config_file.cfg bij met de volgende inhoud:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Voer de bijgewerkte door azure-vote/azure-vote/config_file.cfg in uw opslagplaats.

  5. Selecteer acties in de opslagplaats en controleer of er een werkstroom wordt uitgevoerd. Controleer vervolgens of de werkstroom een groen vinkje heeft en of de bijgewerkte toepassing is geïmplementeerd in uw cluster.

Volgende stappen

Bekijk de volgende starterswerkstromen voor AKS. Zie Starterswerkstromen gebruiken voor meer informatie.