Aracılığıyla paylaş


GitHub Actions ile Azure Container Apps'e dağıtma

Azure Container Apps, düzeltmeleri kapsayıcı uygulamanızda yayımlamak için GitHub Actions'ı kullanmanıza olanak tanır. İşlemeler GitHub deponuza gönderildiğinde, kapsayıcı kayıt defterindeki kapsayıcı görüntüsünü güncelleştiren bir iş akışı tetiklenir. Azure Container Apps, güncelleştirilmiş kapsayıcı görüntüsünü temel alan yeni bir düzeltme oluşturur.

GitHub deposunda yapılan değişiklikler, yeni bir düzeltme oluşturmak için bir eylem tetikler.

GitHub Actions iş akışı, deponuzda belirli bir dala bağlandığınızda tetikler. İş akışını oluştururken, iş akışını tetikleyen dala siz karar verirsiniz.

Bu makalede, tam olarak özelleştirilebilir bir iş akışının nasıl oluşturulacağı gösterilmektedir. Azure CLI ile başlangıç GitHub Actions iş akışı oluşturmak için bkz . Azure CLI ile GitHub Actions iş akışı oluşturma.

Azure Container Apps GitHub eylemi

Kapsayıcı uygulamanızı oluşturmak ve dağıtmak için azure/container-apps-deploy-action eylemi GitHub Actions iş akışınıza eklersiniz.

Eylem aşağıdaki senaryoları destekler:

  • Dockerfile'dan derleme ve Container Apps'e dağıtma
  • Dockerfile olmadan kaynak koddan derleyin ve Container Apps'e dağıtın. Desteklenen diller .NET, Java, Node.js, PHP ve Python'dır
  • Mevcut kapsayıcı görüntüsünü Container Apps'e dağıtma

Kullanım örnekleri

Eylemi kullanmaya yönelik bazı yaygın senaryolar aşağıdadır. Daha fazla bilgi için eylemin GitHub Market sayfasına bakın.

Container Apps'i derleme ve dağıtma

Aşağıdaki kod parçacığında kaynak koddan bir kapsayıcı görüntüsünün nasıl derlenip Container Apps'e nasıl dağıtılacağı gösterilmektedir.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

Eylem, kapsayıcı görüntüsünü oluşturmak için içindeki appSourcePath Dockerfile dosyasını kullanır. Dockerfile bulunamazsa, eylem içindeki appSourcePathkaynak kodundan kapsayıcı görüntüsünü oluşturmaya çalışır.

Mevcut kapsayıcı görüntüsünü Container Apps'e dağıtma

Aşağıdaki kod parçacığında, mevcut bir kapsayıcı görüntüsünün Container Apps'e nasıl dağıtılacağı gösterilmektedir.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Önemli

Ayrı bir adımda bir kapsayıcı görüntüsü oluşturuyorsanız, latest gibi kararlı bir etiket yerine commit SHA'sı gibi benzersiz bir etiket kullandığınızdan emin olun. Daha fazla bilgi için bkz. Görüntü etiketi en iyi yöntemleri.

Azure Container Registry ile kimlik doğrulaması

Kapsayıcı görüntüsünü göndermek için Azure Container Apps eyleminin Azure Container Registry ile kimlik doğrulaması yapması gerekir. Kapsayıcı uygulamasının kapsayıcı görüntüsünü çekmek için Azure Container Registry'nizle de kimlik doğrulaması yapması gerekir.

Görüntüleri göndermek için eylem, azure/login eylemine sağlanan kimlik bilgilerini kullanarak acrName içinde belirtilen kapsayıcı kayıt defteriyle otomatik olarak kimlik doğrulaması yapar.

Görüntüleri çekmek için Azure Container Apps, Azure Container Registry ile kimlik doğrulaması yapmak için yönetilen kimlik (önerilen) veya yönetici kimlik bilgilerini kullanır. Yönetilen kimliği kullanmak için eylemin dağıttığı kapsayıcı uygulamasının yönetilen kimliği kullanacak şekilde yapılandırılması gerekir. Kayıt defterinin yönetici kimlik bilgileriyle kimlik doğrulaması yapmak için eylemin acrUsername ve acrPassword girişlerini ayarlayın.

ACR olmayan kayıt defterlerinden görüntü dağıtma

Azure Container Registry'ye (ACR) ek olarak Azure Container Apps, GitHub Container Registry (GHCR) gibi diğer kayıt defterlerinde barındırılan kapsayıcı görüntülerini destekler. Bu bölümde, genel ve özel görüntüler de dahil olmak üzere GHCR'den kapsayıcı görüntülerinin nasıl dağıtılacağı gösterilmektedir.

Uyarı

GHCR gibi ACR olmayan bir kayıt defteri kullanırken, görüntü genel olsa bile kapsayıcı uygulamanızı kayıt defteriyle kimlik doğrulaması yapmak üzere yapılandırmanız gerekir.

GHCR'den genel görüntü dağıtma

Kapsayıcı görüntüsü genelse, kimlik doğrulaması kimlik bilgilerini belirtmeden dağıtabilirsiniz. Aşağıdaki örnekte, dağıtma eylemini kullanarak GHCR'den genel bir görüntünün nasıl dağıtılacağı gösterilmektedir.

Bu komutu çalıştırmadan önce değerini gerçek GitHub kullanıcı adınız ile değiştirin <YOUR-GITHUB-USERNAME> .

- name: Deploy public GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:latest
    registryServer: ghcr.io

Dağıtmadan önce kapsayıcı uygulamanızı GHCR'den çekecek şekilde yapılandırın:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io

GHCR'den özel görüntü dağıtma

Görüntü özelse GitHub Actions iş akışınızda kimlik doğrulama kimlik bilgilerini sağlamanız gerekir. read:packages kapsamına sahip bir GitHub kişisel erişim belirteci (PAT) kullanın. Belirteci ve kullanıcı adını GitHub deponuzda gizli dizi olarak depolayın.

- name: Deploy private GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:${{ github.sha }}
    registryServer: ghcr.io
    registryUsername: ${{ secrets.GHCR_USERNAME }}
    registryPassword: ${{ secrets.GHCR_TOKEN }}

KAPSAYıCı uygulamasını GHCR kimlik bilgilerinizi kullanarak görüntüyü çekecek şekilde yapılandırın:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io \
  --username <GHCR_USERNAME> \
  --password <GHCR_TOKEN>

<GHCR_USERNAME> ve <GHCR_TOKEN> öğelerini, sırasıyla GitHub kullanıcı adınız ve kişisel erişim belirtecinizle değiştirin.

Uyarı

En son gibi genel bir etiket yerine Git işleme SHA'sı (${{ github.sha }}) gibi benzersiz bir etiket kullanın. Bu, önbelleğe alma sorunlarını önlemeye yardımcı olur ve yeni düzeltmelerin güvenilir bir şekilde oluşturulmasını sağlar.

Yapılandırma

GitHub Actions iş akışını Azure Container Apps'e dağıtacak şekilde yapılandırmak için aşağıdaki adımları uygulayın.

  • Uygulamanız için GitHub deposu oluşturma
  • Yönetilen kimlik etkinleştirilmiş bir kapsayıcı uygulaması oluşturun
  • Azure Container Registry'deki AcrPull rolünü, kapsayıcı uygulamanın yönetilen kimliğine atayın.
  • GitHub deponuzda gizli anahtarları yapılandırın
  • GitHub Actions iş akışı oluşturma

Önkoşullar

Gereksinim Yönergeler
Azure hesabı Hesabınız yoksa ücretsiz bir hesap oluşturun. Devam etmek için Azure aboneliğinde Katkıda Bulunan veya Sahip iznine sahip olmanız gerekir. Ayrıntılar için Bkz. Azure portalını kullanarak Azure rolleri atama.
GitHub Hesabı Ücretsiz kaydolun.
Azure Komut Satırı Arayüzü (Azure CLI) Azure CLI’yi yükleyin.

GitHub deposu oluşturma ve kaynak kodu kopyalama

İş akışını oluşturmadan önce uygulamanızın kaynak kodunun bir GitHub deposunda olması gerekir.

  1. Azure CLI ile Azure'da oturum açın.

    az login
    
  2. Ardından CLI için en son Azure Container Apps uzantısını yükleyin.

    az extension add --name containerapp --upgrade
    
  3. Kendi GitHub deponuz yoksa bir örnekten bir depo oluşturun.

    1. Yeni bir depo oluşturmak için aşağıdaki konuma gidin:
    2. Deponuza adını verin my-container-app.
  4. Depoyu yerel makinenize kopyalayın.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

Yönetilen kimlik etkinleştirilmiş bir kapsayıcı uygulaması oluşturun

Aşağıdaki adımlarda komutunu az containerapp up kullanarak kapsayıcı uygulamanızı oluşturun. Bu komut Azure kaynaklarını oluşturur, kapsayıcı görüntüsünü oluşturur, görüntüyü bir kayıt defterinde depolar ve bir kapsayıcı uygulamasına dağıtır.

Uygulamanızı oluşturduktan sonra, uygulamaya bir yönetilen kimlik ekleyebilir ve kimliğe AcrPull rolünü atayarak kimliğin kayıttan görüntü çekmesine izin verebilirsiniz.

  1. Kopyalanan deponun src klasörüne geçin:

    cd my-container-app
    cd src
    
  2. Komutunu kullanarak Azure kaynakları oluşturun ve bir kapsayıcı uygulaması dağıtınaz containerapp up:

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    Tavsiye

    Derleme bir Debian deposu hatasıyla başarısız olursa komutunu çalıştırarak az extension add --name containerapp --upgradeen son Azure CLI sürümünü ve containerapp uzantısını kullandığınızdan emin olun. Alternatif olarak, derleme üzerinde daha fazla denetim için projenize bir Dockerfile ekleyin.

  3. Komut çıkışında Azure kapsayıcı kayıt defterinin adını not edin.

  4. Kapsayıcı kayıt defterinin tam kaynak kimliğini alın:

    az acr show --name <ACR_NAME> --query id --output tsv
    

    <ACR_NAME> değerini kayıt defterinizin adıyla değiştirin.

  5. Kapsayıcı uygulaması için yönetilen kimliği etkinleştirin:

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    Komut çıkışında yönetilen kimliğin asıl kimliğini not edin.

  6. AcrPull Kapsayıcı Kayıt Defteri rolünü kapsayıcı uygulamasının yönetilen kimliğine atayın:

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    Yönetilen kimliğin asıl kimliğini <MANAGED_IDENTITY_PRINCIPAL_ID> ile ve Container Registry'nin kaynak kimliğini <ACR_RESOURCE_ID> ile değiştirin.

  7. Kapsayıcı uygulamasını, kapsayıcı kayıt defterinden görüntü çekmek için yönetilen kimliği kullanacak şekilde yapılandırın:

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    <ACR_NAME> değerini Azure kapsayıcı kayıt defterinizin adıyla değiştirin.

GitHub deponuzda gizli anahtarları yapılandırın

GitHub iş akışı, Azure'da kimlik doğrulaması yapmak için adlı AZURE_CREDENTIALS bir gizli dizi gerektirir. Gizli anahtar, kapsayıcı uygulamasını ve kapsayıcı kayıt defterini içeren kaynak grubunda 'Katkıda Bulunan' rolüne sahip bir hizmet sorumlusunun kimlik bilgilerini içerir.

  1. Kapsayıcı uygulamasını ve kapsayıcı kayıt defterini içeren kaynak grubunda Katkıda Bulunan rolüne sahip bir hizmet sorumlusu oluşturun.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Azure aboneliğinizin kimliğini <SUBSCRIPTION_ID> değeriyle değiştirin. Kapsayıcı kayıt defteriniz farklı bir kaynak grubundaysa, parametresinde her iki kaynak grubunu da --scopes belirtin.

  2. komutundan JSON çıkışını kopyalayın.

  3. GitHub deposunda Ayarlar>Gizli Diziler>Eylemler bölümüne gidin ve Yeni depo gizli dizi'ni seçin.

  4. Ad olarak girin AZURE_CREDENTIALS ve JSON çıktısının içeriğini değer olarak yapıştırın.

  5. Gizli ekle öğesini seçin.

GitHub Actions iş akışı oluşturma

  1. GitHub deposunda Eylemler'e gidin ve Yeni iş akışı'nı seçin.

  2. İş akışını kendiniz ayarlayın'ı seçin.

  3. Aşağıdaki YAML'yi düzenleyiciye yapıştırın.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Değiştirin <ACR_NAME> değerini Azure Container Registry'nizin adıyla. altında branches dal adının ve appSourcePath, containerAppName ile resourceGroup değerlerinin, deponuz ve Azure kaynaklarınız için değerlerle eşleşip eşleşmediğini onaylayın.

  4. Değişiklikleri ana dala kaydedin.

GitHub Actions iş akışı yürütmesi, kapsayıcı uygulamanızı derlemeye ve dağıtmaya başlamalıdır. İlerleme durumunu denetlemek için Eylemler'e gidin.

Uygulamanızın yeni bir sürümünü dağıtmak için ana dala yeni bir işlemi yükleyin.