Bagikan melalui


Membangun, menguji, dan menyebarkan kontainer ke Azure Kubernetes Service (AKS) menggunakan GitHub Actions

GitHub Actions memberi Anda fleksibilitas untuk membangun alur kerja siklus hidup pengembangan perangkat lunak otomatis. Anda dapat menggunakan beberapa tindakan Kubernetes untuk menyebarkan ke kontainer dari Azure Container Registry (ACR) ke Azure Kubernetes Service (AKS) dengan GitHub Actions.

Prasyarat

GitHub Actions untuk AKS

Dengan GiHub Actions, Anda dapat mengotomatiskan alur kerja pengembangan perangkat lunak dari dalam GitHub. Untuk informasi selengkapnya, lihat Tindakan GitHub untuk Azure.

Tabel berikut ini mencantumkan tindakan yang tersedia untuk AKS:

Nama Deskripsi Detail Selengkapnya
azure/aks-set-context Atur konteks kluster AKS target untuk tindakan lain untuk menggunakan atau menjalankan perintah kubectl apa pun. azure/aks-tentukan-konteks
azure/k8s-set-context Atur konteks kluster Kubernetes target untuk tindakan lain untuk menggunakan atau menjalankan perintah kubectl apa pun. azure/k8s-tentukan-konteks
azure/k8s-bake Buat file manifes untuk digunakan untuk penyebaran menggunakan Helm, kustomisasi, atau kompose. azure/k8s-bake
azure/k8s-create-secret Buat rahasia generik atau rahasia docker-registri di kluster Kubernetes. azure/k8s-buat-rahasia
azure/k8s-deploy Sebarkan manifes ke kluster Kubernetes. azure/k8s-sebarkan
azure/k8s-lint Validasi/lint file manifes Anda. azure/k8s-lint
azure/setup-helm Instal versi tertentu dari biner Helm pada runner. azure/siapkan-helm
azure/setup-kubectl Instal versi kubectl tertentu pada runner. azure/siapkan-kubectl
azure/k8s-artifact-substitute Perbarui tag atau digest untuk gambar kontainer. azure/k8s-artefak-pengganti
azure/aks-create-action Buat kluster AKS menggunakan Terraform. azure/aks-buat-tindakan
azure/aks-github-runner Siapkan agen yang dihost sendiri untuk GitHub Actions. azure/aks-github-runner
azure/acr-build Buat kontainer menggunakan ACR. azure/acr-build

Menggunakan GitHub Actions dengan AKS

Sebagai contoh, Anda dapat menggunakan GitHub Actions untuk menyebarkan aplikasi ke kluster AKS Anda setiap kali perubahan didorong ke repositori GitHub Anda. Contoh ini menggunakan aplikasi Azure Vote.

Catatan

Contoh ini menggunakan perwakilan layanan untuk autentikasi dengan kluster ACR dan AKS Anda. Atau, Anda dapat mengonfigurasi Open ID Connect (OIDC) dan memperbarui tindakan azure/login untuk menggunakan OIDC. Untuk informasi selengkapnya, lihat Menyiapkan Azure Login dengan autentikasi OpenID Connect.

Fork dan perbarui repositorinya

  1. Navigasikan ke repositori Azure Vote dan pilih Fork.

  2. azure-vote-all-in-one-redis.yaml Perbarui untuk menggunakan ACR Anda untuk azure-vote-front gambar. Ganti <registryName> dengan nama aplikasi web Anda.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Terapkan yang diperbarui azure-vote-all-in-one-redis.yaml ke repositori Anda.

Membuat rahasia

  1. Buat perwakilan layanan untuk mengakses grup sumber daya Anda dengan Contributor peran menggunakan az ad sp create-for-rbac perintah . Ganti <SUBSCRIPTION_ID> dengan ID langganan akun Azure Anda dan <RESOURCE_GROUP> dengan nama grup sumber daya yang berisi ACR Anda.

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

    Output Anda akan terlihat mirip dengan contoh output berikut:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Navigasi ke pengaturan repositori GitHub Anda dan pilih Tindakan Rahasia dan variabel>Keamanan>.

  3. Untuk setiap rahasia, pilih Rahasia Repositori Baru dan masukkan nama dan nilai rahasia.

    Nama rahasia Nilai rahasia
    KREDENSIAL_AZURE Seluruh output JSON dari az ad sp create-for-rbac perintah .
    perwakilan_layanan Nilai dari <clientId>.
    kata sandi_perwakilan_layanan Nilai dari <clientSecret>.
    langganan Nilai dari <subscriptionId>.
    penyewa Nilai dari <tenantId>.
    registri Nama registri Anda.
    repositori azuredocs
    resource_group Nama grup sumber daya Anda.
    cluster_name Nama kluster Anda.

Untuk informasi selengkapnya tentang membuat rahasia, lihat Rahasia Terenkripsi.

Membuat file tindakan

  1. Di repositori Anda, buat .github/workflows/main.yml dan tempelkan konten berikut:

    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 
    

    Bagian on berisi peristiwa yang memicu tindakan. Dalam file contoh, tindakan memicu saat perubahan didorong ke azure-vote direktori.

    Bagian berisi steps setiap tindakan yang berbeda:

    1. Periksa kode sumber menggunakan GitHub Actions Checkout Actions untuk mengkloning repositori.
    2. ACR build menggunakan Azure Container Registry Build Action untuk membangun gambar dan mengunggahnya ke registri Anda.
    3. Login Azure menggunakan Azure Login Action untuk masuk ke akun Azure Anda.
    4. Atur konteks AKS menggunakan Azure AKS Set Context Action untuk mengatur konteks kluster AKS Anda.
    5. Siapkan kubectl menggunakan Azure AKS Setup Kubectl Action untuk menginstal kubectl pada runner Anda.
    6. Sebarkan ke AKS menggunakan Azure Kubernetes Deploy Action untuk menyebarkan aplikasi ke kluster Kubernetes Anda.
  2. Terapkan file ke .github/workflows/main.yml repositori Anda.

  3. Untuk mengonfirmasi bahwa tindakan berfungsi, perbarui azure-vote/azure-vote/config_file.cfg dengan konten berikut:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Terapkan yang diperbarui azure-vote/azure-vote/config_file.cfg ke repositori Anda.

  5. Di repositori Anda, pilih Tindakan dan konfirmasi alur kerja sedang berjalan. Kemudian, konfirmasikan alur kerja memiliki tanda centang hijau dan aplikasi yang diperbarui disebarkan ke kluster Anda.

Langkah berikutnya

Tinjau alur kerja pemula berikut untuk AKS. Untuk informasi selengkapnya, lihat Menggunakan alur kerja pemula.