Как развернуть несколько микро сервисов с использованием конвейеров DevOps - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь развернуть два приложения .Net Core в Azure Kubernetes, используя DevOps. Конвейер по умолчанию создает и развертывает только первый проект, который я добавил.

Я создал одно решение с двумя папками решений, каждая из которых содержит проект .Net Core. Я добавил поддержку оркестровки в оба проекта и создал конвейер Azure с помощью «мастера» в DevOps. Я добавил дополнительный проект после успешного развертывания первого проекта. Я думал, что проблема существует, потому что Соединение со службой реестра Docker не содержит новый проект, поэтому я удалил его и заново создал соединение, но оно все еще только развертывает первый проект. Я использую Azure Git.

azure-pipeline.yaml довольно стандартен. Я принял значение по умолчанию, которое было создано при создании конвейера. Вот мой этап buildAndPush.

stages:
- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    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)
    - task: PublishPipelineArtifact@0
      inputs:
        artifactName: 'manifests'
        targetPath: 'manifests'

Как мне заставить его создать и развернуть другой оставшийся проект?

Ответы [ 3 ]

0 голосов
/ 24 июня 2019

Вам нужно удалить файл azure-pipelines.yml из вашего хранилища, если вы хотите создать новый конвейер. Это позволит вам с самого начала повторить шаг «Развертывание в службу Azure Kubernetes». Это должно дать вам возможность добавлять любые дополнительные проекты в релиз.

0 голосов
/ 24 июня 2019

Мне удалось развернуть два проекта с помощью одного файла azure-pipelines.yml; однако, я почти уверен, что это неправильно. Я продублировал стадию сборки для каждого проекта, а также указал два отдельных файла Docker. Кроме того, я добавил файлы deploy.yml и service.yml для каждого проекта. Смотрите мой azure-pipelines.yml ниже. Будем благодарны за любые советы о том, как сделать это правильно.

# Deploy to Azure Kubernetes Service
# Build and push image to Azure Container Registry; Deploy to Azure Kubernetes Service
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- master

resources:
- repo: self

variables:

  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '<hidden>'
  imageRepository1: 'k8spocfront'
  imageRepository2: 'k8spocback'
  containerRegistry: '<hidden>.azurecr.io'
  dockerfilePath1: 'k8sPOC/Dockerfile'
  dockerfilePath2: 'k8sPOCApi/Dockerfile'
  tag: '$(Build.BuildId)'

  # Kubernetes Namespace
  k8sNamespace: 'default'
  imagePullSecret: '<hidden>'

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

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

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

    - task: PublishPipelineArtifact@0
      inputs:
        artifactName: 'manifests'
        targetPath: 'manifests'

- stage: Deploy_FrontEnd
  displayName: Deploy stage
  dependsOn: Build_BackEnd
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: '<hidden>.default'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@1
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment1.yml
                $(System.ArtifactsDirectory)/manifests/service1.yml
                $(System.ArtifactsDirectory)/manifests/deployment2.yml
                $(System.ArtifactsDirectory)/manifests/service2.yml                
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository1):$(tag)
                $(containerRegistry)/$(imageRepository2):$(tag)
0 голосов
/ 24 июня 2019

Для каждого решения требуется отдельный конвейер сборки.Мое предложение состоит в том, чтобы объединить оба проекта в одно решение.Вы можете иметь любой другой тип проектов в рамках одного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...