docker - 如何使用 DevOps 管道部署多个微服务
问题描述
我正在尝试使用 DevOps 将两个 .Net Core 应用程序部署到 Azure Kubernetes。默认管道仅构建和部署我添加的第一个项目。
我创建了一个包含两个解决方案文件夹的单个解决方案,每个文件夹都包含一个 .Net Core 项目。我为这两个项目添加了编排支持,并使用 DevOps 中的“向导”创建了一个 Azure 管道。我在成功部署第一个项目后添加了辅助项目。我认为问题存在是因为 Docker Registry Service Connection 不包含新项目,所以我删除了它并重新创建了连接,但它仍然只部署了第一个项目。我正在使用 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'
我如何让它来构建和部署其他剩余的项目?
解决方案
我已经设法使用单个 azure-pipelines.yml 文件部署了两个项目;但是,我几乎可以肯定这是不正确的。我为每个项目复制了构建阶段,并指定了两个单独的 Dockerfile。另外,我为每个项目添加了一个deployment.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)
推荐阅读
- javascript - ReferenceError: self 在设置 Firebase 时未定义
- python - Python中NumPy数组在一定范围内的最小值和最大值
- php - Laravel 中的 Swagger:为 Json 数据设置参数示例
- requirejs - 加载 typedarray 模块时出现“未捕获的 ReferenceError:未定义导出”
- matlab - 使用带有 for 循环的 syms 命令
- android - 使用 Gitlab 从 Firebase (APP Distribution) 下载 Android .apk,以运行 e2e 自动化测试
- c# - 卸载时如何删除 VSIX 的设置值
- javascript - 如何在地图上显示移动车辆实时位置的标记(Python-flask、HTML、JS、CSS、AJAX-jQuery、OpenStreetMap)
- python - Python如何一次迭代列表200个元素,直到我到达所有元素?
- php - 如何从特定于用户会话 ID 的多个表中检索列?