Azure Pipelines üzerinden Azure Container Apps'e dağıtın

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

Depodaki belirli bir dala yapılan commit'ler pipeline'ı tetikler. İşlem hattını oluştururken tetikleyicinin hangi dal olduğuna siz karar verirsiniz.

Container Apps Azure Pipelines görevi

Görev aşağıdaki senaryoları destekler:

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

Üretim sürümüyle birlikte bu görev Azure DevOps ile birlikte gelir ve açık yükleme gerektirmez. Tüm belgeler için bkz. AzureContainerApps@1 - Azure Container Apps Dağıt v1 görevi.

Kullanım örnekleri

Aşağıda, görevi kullanmaya yönelik bazı yaygın senaryolar yer alır. Daha fazla bilgi için görevin belgelerine 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:
- task: AzureContainerApps@1
  inputs:
    appSourcePath: '$(Build.SourcesDirectory)/src'
    azureSubscription: 'my-subscription-service-connection'
    acrName: 'myregistry'
    containerAppName: 'my-container-app'
    resourceGroup: 'my-container-app-rg'

Görev, container imajını oluşturmak için appSourcePath konumundaki Dockerfile dosyasını kullanır. Dockerfile bulunamazsa, görev 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. Görev, hizmet bağlantısını kullanarak kayıt defteriyle kimlik doğrulaması yapar. Hizmet bağlantısının kimliğine kayıt defteri rolü atanmamışsa AcrPush ve acrUsername giriş parametrelerini kullanarak kayıt defterinin acrPassword yönetici kimlik bilgilerini sağlayın.

steps:
  - task: AzureContainerApps@1
    inputs:
      azureSubscription: 'my-subscription-service-connection'
      containerAppName: 'my-container-app'
      resourceGroup: 'my-container-app-rg'
      imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'

Önemli

Ayrı bir adımda kapsayıcı görüntüsü oluşturuyorsanız, latest gibi kararlı bir etiket yerine derleme kimliği 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 Container Apps görevinin Azure Container Registry'nizle kimlik doğrulaması yapması gerekir. Kapsayıcı görüntüsünü çekmek için kapsayıcı uygulamasının da kapsayıcı kayıt defterinizle kimlik doğrulaması yapması gerekir.

Görüntüleri göndermek için, görev içinde sağlanan acrNamehizmet bağlantısını kullanarak içinde azureSubscription belirtilen kapsayıcı kayıt defteriyle otomatik olarak kimlik doğrulaması yapar. Hizmet bağlantısının kimliğine kayıt defteri rolü atanmamışsa AcrPush ve acrUsernamekullanarak acrPassword kayıt defterinin yönetici kimlik bilgilerini sağlayın.

Görüntüleri çekmek için Container Apps, kapsayıcı kayıt defteriyle kimlik doğrulaması gerçekleştirmek amacıyla yönetilen kimliği (önerilen) veya yönetici kimlik bilgilerini kullanır. Yönetilen kimliği kullanmak için görevin hedef 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 görevin acrUsername ve acrPassword girişlerini ayarlayın.

Yapılandırma

Container Apps'e dağıtmak üzere bir Azure DevOps işlem hattı yapılandırmak için aşağıdaki adımları tamamlayın.

  • Uygulamanız için Azure DevOps deposu oluşturma
  • Yönetilen kimlik etkinleştirilmiş bir kapsayıcı uygulaması oluşturun
  • AcrPull kapsayıcı kayıt defteri rolünü kapsayıcı uygulamasının yönetilen kimliğine atayın
  • Azure aboneliğiniz için Azure DevOps hizmet bağlantısı yapılandırma
  • Azure DevOps işlem hattı oluşturma

Önkoşullar

Gereksinim Yönergeler
Azure hesabı Hesabınız yoksa ücretsiz bir hesap oluşturun. Bu makaledeki yordamları tamamlamak için Azure aboneliğinde Katkıda Bulunan veya Sahip iznine sahip olmanız gerekir. Daha fazla bilgi için bkz. Azure portalını kullanarak Azure rolleri atama.
Azure DevOps projesi Azure DevOps gidin ve Azure kullanmaya başlayın'ı seçin. Ardından yeni bir proje oluşturun.
Azure CLI Azure CLI’yi yükleyin.

Azure DevOps deposu oluşturma ve kaynak kodu kopyalama

İşlem hattı oluşturmadan önce uygulamanızın kaynak kodu bir depoda olmalıdır.

  1. Azure DevOps'ta oturum açın ve projenize gidin.

  2. Sol bölmede Depolar'ı seçin.

  3. Bir depoyu içe aktar'ı seçin.

  4. Aşağıdaki değerleri girin ve İçeri Aktar'ı seçin:

    Alan Değer
    Depo türü Git
    URL'yi kopyalama https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
  5. İçe aktar'ı seçin.

  6. Depo URL'sini görmek ve kopyalamak için Klonla seçeneğini seçin.

  7. Bir komut istemi açın ve aşağıdaki komutu çalıştırın:

    git clone <REPOSITORY_URL> my-container-app
    

    <REPOSITORY_URL> öğesini kopyaladığınız URL ile değiştirin.

Bir kapsayıcı uygulaması oluşturun ve yönetilen kimliği yapılandırın

Aşağıdaki adımları tamamlayarak kapsayıcı uygulamanızı oluşturun. az containerapp up komutu 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ı dağıtır.

Uygulamanız oluşturulduktan sonra, uygulamanıza bir yönetilen kimlik ekleyebilir ve kimliğe, kayıt defterinden görüntü çekmesine izin vermek için AcrPull rolünü atayabilirsiniz.

  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.

Azure DevOps hizmet bağlantısı oluşturma

Container Apps'e dağıtmak için Azure aboneliğiniz için bir Azure DevOps hizmet bağlantısı oluşturmanız gerekir.

  1. Azure DevOps'ta Proje ayarları'nı seçin.

  2. Hizmet bağlantıları'nı seçin.

  3. Hizmet bağlantısı oluştur’u seçin.

  4. Azure Resource Manager'ı ve ardından İleri'yi seçin.

  5. Uygulama kaydı (otomatik)'i ve ardından İleri'yi seçin.

  6. Aşağıdaki değerleri sağlayın ve kaydet'i seçin:

    Alan Değer
    Abonelik Azure aboneliği seçin.
    Kaynak grubu Kapsayıcı uygulamanızı ve kapsayıcı kayıt defterinizi içeren kaynak grubunu (my-container-app-rg) seçin.
    Hizmet bağlantısı adı my-subscription-service-connection

Hizmet bağlantıları hakkında daha fazla bilgi edinmek için bkz . Microsoft Azure'a bağlanma.

Azure DevOps YAML işlem hattı oluşturma

  1. Azure DevOps projenizde İşlem Hatları'nı seçin.

  2. İşlem hattı oluştur'u seçin.

  3. Azure Repos Git'i seçin.

    Uyarı

    Seçenek olarak Azure Repos Git'i görmüyorsanız kaynak kodunuzun Azure DevOps projenizdeki bir Git deposuna gönderildiğinden emin olun.

  4. Kaynak kodunuzu (my-container-app) içeren depoyu seçin.

  5. Başlangıç işlem hattı'ı seçin.

  6. Düzenleyicide dosyanın içeriğini aşağıdaki YAML ile değiştirin:

    trigger:
      branches:
        include:
          - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
      - task: AzureContainerApps@1
        inputs:
          appSourcePath: '$(Build.SourcesDirectory)/src'
          azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>'
          acrName: '<ACR_NAME>'
          containerAppName: 'my-container-app'
          resourceGroup: 'my-container-app-rg'
    

    <AZURE_SUBSCRIPTION_SERVICE_CONNECTION> değerini önceki adımda oluşturduğunuz Azure DevOps hizmet bağlantısının adıyla (my-subscription-service-connection) değiştirin. <ACR_NAME> değerini Azure kapsayıcı kayıt defterinizin adıyla değiştirin.

  7. Kaydet ve çalıştır'ı seçin.

Azure Pipelines çalıştırması kapsayıcı uygulamanızı derlemeye ve dağıtmaya başlar. İlerleme durumunu denetlemek için İşlem Hatları'na gidin ve çalıştırmayı seçin. İlk işlem hattı çalıştırması sırasında işlem hattına hizmet bağlantınızı kullanma yetkisi vermeniz istenebilir.

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