GitHub Actions für die Bereitstellung im Kubernetes Service

GitHub Actions bietet Ihnen die Flexibilität, einen automatisierten Workflow für den Softwareentwicklungs-Lebenszyklus zu erstellen. Sie können mehrere Kubernetes-Aktionen verwenden, um Container von Azure Container Registry zu Azure Kubernetes Service mit GitHub Actions bereitzustellen.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
  • Ein GitHub-Konto. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.
  • Ein vorhandener AKS-Cluster mit einer angefügten Azure Container Registry (ACR).

Konfigurieren der Integration zwischen Azure und Ihrem GitHub-Repository

Wenn Sie GitHub Actions verwenden, müssen Sie die Integration zwischen Azure und Ihrem GitHub-Repository konfigurieren. Weitere Informationen zum Herstellen einer Verbindung zwischen Ihrem GitHub-Repository und Azure finden Sie unter Verwenden von GitHub Actions zum Herstellen einer Verbindung mit Azure.

Verfügbare Aktionen

GitHub Actions unterstützt Sie beim Automatisieren Ihrer Softwareentwicklungsworkflows innerhalb von GitHub. Weitere Informationen zur Verwendung von GitHub Actions mit Azure finden Sie unter Was ist GitHub Actions für Azure?.

Die folgende Tabelle zeigt die verfügbaren GitHub Actions, die speziell mit AKS integriert sind.

Name BESCHREIBUNG Weitere Informationen
azure/aks-set-context Legen Sie den AKS-Zielclusterkontext fest, der von anderen Aktionen verwendet wird, oder führen Sie beliebige kubectl-Befehle aus. azure/aks-set-context
azure/k8s-set-context Legen Sie den Kubernetes-Zielclusterkontext fest, der von anderen Aktionen verwendet wird, oder führen Sie beliebige kubectl-Befehle aus. azure/k8s-set-context
azure/k8s-bake Erstellen Sie eine Manifestdatei, die Sie mithilfe von Helm, kustomize oder kompose für Bereitstellungen verwenden können. azure/k8s-bake
azure/k8s-create-secret Erstellen Sie ein generisches Geheimnis oder docker-registry-Geheimnis im Kubernetes-Cluster. azure/k8s-create-secret
azure/k8s-deploy Stellen Sie Manifeste in Kubernetes-Clustern bereit. azure/k8s-deploy
azure/k8s-lint Überprüfen (Lint) Sie die Manifestdateien. azure/k8s-lint
azure/setup-helm Installieren Sie eine bestimmte Version der Helm-Binärdatei auf dem Runner. azure/setup-helm
azure/setup-kubectl Installiert eine bestimmte Version von kubectl auf dem Runner. azure/setup-kubectl
azure/k8s-artifact-substitute Aktualisieren Sie das Tag oder den Digest für Containerimages. azure/k8s-artifact-substitute
azure/aks-create-action Erstellen Sie einen AKS-Cluster mithilfe von Terraform. azure/aks-create-action
azure/aks-github-runner Richten Sie selbstgehostete Agents für GitHub Actions ein. azure/aks-github-runner

Darüber hinaus verwendet das Beispiel im nächsten Abschnitt die Aktion azure/acr-build.

Beispiel für die Verwendung von GitHub Actions mit AKS

Sie können z. B. GitHub Actions verwenden, um eine Anwendung auf Ihrem AKS-Cluster bereitzustellen, sobald eine Änderung in Ihr GitHub-Repository gepusht wird. In diesem Beispiel wird die Azure Vote-Anwendung verwendet.

Hinweis

In diesem Beispiel wird ein Dienstprinzipal für die Authentifizierung bei Ihrem ACR- und AKS-Cluster verwendet. Alternativ können Sie auch Open ID Connect (OIDC) konfigurieren und die Aktion azure/login aktualisieren, um OIDC zu verwenden. Weitere Informationen finden Sie unter Einrichten der Azure-Anmeldung mit OpenID Connect-Authentifizierung.

Forken und Aktualisieren des Repositorys

Navigieren Sie zum Azure Vote-Repository, und klicken Sie auf die Schaltfläche Forken.

Sobald das Repository geforkt ist, aktualisieren Sie azure-vote-all-in-one-redis.yaml, um Ihre ACR-Instanz für das azure-vote-front-Image zu verwenden.

...
      containers:
      - name: azure-vote-front
        image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
...

Wichtig

Das Update auf azure-vote-all-in-one-redis.yaml muss für Ihr Repository committet werden, bevor Sie die weiteren Schritte durchführen können.

Erstellen von Geheimnissen

Erstellen Sie mithilfe des folgenden Befehls ein Dienstprinzipal, um mit der Rolle Contributor auf Ihre Ressourcengruppe zuzugreifen, und ersetzen Sie Folgendes:

  • <SUBSCRIPTION_ID> durch die Abonnement-ID Ihres Azure-Kontos
  • <RESOURCE_GROUP> durch den Namen der Ressourcengruppe, in der sich Ihre ACR-Instanz befindet
az ad sp create-for-rbac \
    --name "ghActionAzureVote" \
    --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
    --role Contributor \
    --sdk-auth

Im Folgenden sehen Sie eine Beispielausgabe des obigen Befehls.

{
  "clientId": <clientId>,
  "clientSecret": <clientSecret>,
  "subscriptionId": <subscriptionId>,
  "tenantId": <tenantId>,
  ...
}

Erstellen Sie in Ihrem GitHub-Repository die unten folgenden Geheimnisse, die Ihre Aktion verwenden soll. So erstellen Sie ein Geheimnis

  1. Navigieren Sie zu den Einstellungen des Repositorys, und wählen Sie Sicherheit > Geheimnisse und Variablen > Aktionen aus.
  2. Klicken Sie für jedes Geheimnis auf Neues Repositorygeheimnis, und geben Sie den Namen und den Wert des Geheimnisses ein.

Weitere Informationen zum Erstellen von Geheimnissen finden Sie unter Verschlüsselte Geheimnisse.

Geheimnisname Geheimniswert
AZURE_CREDENTIALS Die gesamte JSON-Ausgabe des az ad sp create-for-rbac-Befehls
service_principal Der Wert von <clientId>
service_principal_password Der Wert von <clientSecret>
Abonnement Der Wert von <subscriptionId>
tenant Der Wert von <tenantId>
Registrierung Der Name Ihrer Registrierung
repository azuredocs
resource_group Den Namen Ihrer Ressourcengruppe
cluster_name Der Name Ihres Clusters

Aktionsdatei erstellen

Erstellen Sie eine .github/workflows/main.yml In Ihrem Repository mit den folgenden Inhalten:

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 

Wichtig

Die .github/workflows/main.yml-Datei muss für Ihr Repository committet sein, bevor Sie die Aktion ausführen können.

Der on-Abschnitt enthält das Ereignis, das die Aktion auslöst. In der obigen Datei wird die Aktion ausgelöst, wenn eine Änderung in das Verzeichnis azure-vote gepusht wird.

In der obigen Datei enthält der steps-Abschnitt jede einzelne Aktion, die der Reihe nach ausgeführt wird:

  1. Quellcode auschecken verwendet die Aktion „Auschecken“ von GitHub Actions, um das Repository zu klonen.
  2. ACR erstellen verwendet die Aktion „Erstellen“ von Azure Container Registry, um das Image zu erstellen und es in Ihre Registrierung hochzuladen.
  3. Azure-Anmeldung verwendet die Azure-Aktion „Anmelden“ für die Anmeldung bei Ihrem Azure-Konto.
  4. AKS-Kontext festlegen verwendet die Aktion „Kontext festlegen“ von Azure AKS, um den Kontext für Ihren AKS-Cluster festzulegen.
  5. kubectl einrichten verwendet die Aktion „Kubectl einrichten“ von Azure AKS, um kubectl auf Ihrem Runner zu installieren.
  6. In AKS bereitstellen verwendet die Aktion „Bereitstellen“ von Azure Kubernetes, um die Anwendung in Ihrem Kuberentes-Cluster bereitzustellen.

Bestätigen Sie, dass die Aktion funktioniert, indem Sie ein Update von azure-vote/azure-vote/config_file.cfg auf die folgende Version durchführen und die Änderungen in Ihr Repository pushen:

# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Fish'
VOTE2VALUE = 'Dogs'
SHOWHOST = 'false'

Klicken Sie in Ihrem Repository auf Actions, und bestätigen Sie, dass ein Workflow ausgeführt wird. Sobald der Workflow abgeschlossen ist, bestätigen Sie, dass er mit einem grünen Häkchen versehen ist und die aktualisierte Anwendung in Ihrem Cluster bereitgestellt wurde.

Nächste Schritte

Überprüfen Sie die folgenden Startworkflows für AKS. Weitere Informationen zur Verwendung von Startworkflows finden Sie unter Verwenden von Startworkflows.