Alıştırma - Bulutta yerel uygulamanızı dağıtmak için Azure DevOps işlem hattı oluşturma

Tamamlandı

Yöneticiniz, şirket eShop uygulamasının Azure Pipelines'ı kullanması için CI/CD'yi değiştirmenizi istiyor. Şimdi ürün hizmetinizi derlemek ve dağıtmak için bir Azure DevOps İşlem Hattı oluşturacaksınız.

Azure DevOps İşlem Hattı oluşturma

Önemli

Başlamadan önce bir Azure DevOps hesabınız olması gerekir. Yoksa, dev.azure.com'de ücretsiz olarak oluşturabilirsiniz.

  1. dev.azure.com oturum açın.
  2. + Yeni proje'yi seçin.
  3. Proje adı için eShop dağıtımı girin.
  4. Görünürlük seçeneğini Özel olarak bırakın, Oluştur'u seçin.
  5. Sol tarafta İşlem Hatları'nı ve ardından İşlem Hattı Oluştur'u seçin.
  6. Bağlan sayfasında Kodunuz nerede? için GitHub'ı seçin.
  7. İstenirse GitHub'da oturum açın ve Azure Pipelines'a GitHub hesabınıza erişme yetkisi verin.
  8. Depo seçin alanında çatallanmış deponuzu seçin.
  9. Yapılandır sayfasında Azure Kubernetes Service'e Dağıt seçeneğini belirleyin.
  10. Azure Kubernetes Service'e Dağıt bölmesinde Azure aboneliğinizi ve ardından Devam'ı seçin.
  11. İstenirse Azure aboneliğinizde oturum açın.
  12. Küme için önceki aks-eshop ünitesinde oluşturduğunuz AKS kümesini seçin.
  13. Ad Alanı için Var olanı seçili bırakın ve varsayılan'ı seçin.
  14. Container registry için, önceki ünitede oluşturduğunuz Azure Container Registry'yi seçin; örneğin, acseshop186748394.
  15. Görüntü adı için productservice girin.
  16. Hizmet Bağlantı Noktası için 8080 girin.
  17. Doğrula ve yapılandır'ı seçin.

İşlem hattı YAML dosyasını gözden geçirin

Azure Pipelines, uygulamanızı derleme ve dağıtma adımlarını tanımlamak için YAML dosyalarını kullanır. YAML dosyası GitHub deponuzda depolanır ve sağladığınız bilgilere göre sizin için otomatik olarak oluşturulur.

ŞIMDI YAML dosyasını gözden geçirelim:

trigger:
- main

resources:
- repo: self

variables:

  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
  imageRepository: 'productservice'
  containerRegistry: 'acseshop186748394.azurecr.io'
  dockerfilePath: '**/Dockerfile'
  tag: '$(Build.BuildId)'
  imagePullSecret: 'acseshop18674839414442d34-auth'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'


stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - upload: manifests
      artifact: manifests

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build

  jobs:
  - deployment: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Tetikleyici ve kaynaklar bölümleri, işlem hattının ne zaman çalıştırılacağını tanımlar. Bu durumda, deponuzun ana dalında bir değişiklik işlendiğinde işlem hattı çalışır.

Değişkenler bölümü, işlem hattında kullanılan değişkenleri tanımlar. Değişkenler, Azure Container Registry'yi ve kullanılacak Dockerfile'ı tanımlamak için kullanılır.

YAML daha sonra ubuntu-latest aracısını kullanan bir Derleme işi tanımlar. İş, görüntüyü derlemek ve Azure Container Registry'ye göndermek için Docker görevini kullanır.

Son aşama, güncelleştirilmiş ürün hizmetini AKS'ye dağıtmaktır. İş, görüntüyü AKS'ye dağıtmak için KubernetesManifest görevini kullanır.

İşlem hattını çalıştırma

İşlem hattınızı gözden geçirin YAML sayfasının sağ üst kısmında Kaydet ve çalıştır'ı seçin. Kaydet ve çalıştır bölmesinde:

  1. Bu işleme için yeni dal oluştur'u seçin.
  2. Diğer tüm seçenekleri varsayılan olarak bırakın.
  3. Kaydet ve çalıştır'ı seçin.

İşlem hattını izleme ve sorun giderme

Azure Pipelines, Azure DevOps portalından izlenir ve yönetilir. Şimdi oluşturduğunuz işlem hattını çalıştırmanın çıktısına bakalım.

A screenshot showing the status of an Azure Pipeline.

Özet sayfasında, çalışan işlem hattınızın tüm aşamaları gösterilir. Adımları daha ayrıntılı görüntülemek için bir aşama seçebilirsiniz. Birazdan işlem hattının başarısız olduğunu göreceksiniz. Derleme aşamasını seçin.

A screenshot of the build stage in a pipeline that has failed.

Derleme aşamasında derlemenin başarısız olduğunu görebilirsiniz. Oluştur ve Azure Container Registry'ye görüntü gönderme adımını seçin. Günlük dosyasındaki hata şunları gösterir:

##[error]Unhandled: No Dockerfile matching  /home/vsts/work/1/s/**/Dockerfile  was found.

Hatayı düzeltme

DevOps'ta işlem hattı özet sayfasına geri dönün. Hatayı düzeltmek için oluşturulan işlem hattını düzenleyeceksiniz.

  1. Sağ üst kısımda Diğer eylemler menüsünü ve ardından İşlem hattını düzenle'yi seçin.

  2. YAML dosyasının 17. satırı, kullanılacak Dockerfile dosyasını tanımlar ve işlem hattı varsayılan olarak deponun kökünde Dockerfile adlı bir dosya olmasını bekler.

    eShop, DockerfileProducts adlı ürün hizmeti için farklı bir docker dosyası kullanır. Satır 17'yi şu şekilde düzenleyin:

      dockerfilePath: '**/DockerfileProducts.acr'
    
  3. Kaydet'i seçin.

  4. Kaydet bölmesinde Kaydet'i seçin.

  5. Çalıştır'ı ve ardından İşlem hattını çalıştır bölmesinde Çalıştır'ı seçin.

    Derleme aşamasının tamamlanmasını izleyin. Dağıtım aşaması siz seçene ve çalışmasına izin verilene kadar duraklatılır.

    A screenshot showing the completed pipeline.

    İşlem hattı başarıyla tamamlar. Adımları görüntülemek için Dağıtım aşamasını seçin.

    A screenshot showing the Deploy stage and the successfully completed steps.