如何在单个Pipeline YAML中部署两个Kubernetes Manifest文件?
Azure DevOps Pipeline 多Kubernetes Manifest文件部署问题
问题场景
现有如下Azure DevOps Pipeline YAML配置,需要在deploy阶段的KubernetesManifest@0任务中传入两个Manifest文件,尝试用逗号分隔路径的写法无法生效,求正确实现方式。
原Pipeline配置
trigger: - master variables: imageName: 'gosample' registry: 'kubreg.azurecr.io' stages: - stage: build jobs: - job: 'BuildAndPush' pool: vmImage: 'ubuntu-latest' steps: - task: Docker@2 inputs: containerRegistry: 'ACR' repository: '$(imageName)' command: 'buildAndPush' Dockerfile: '**/Dockerfile' - task: PublishPipelineArtifact@0 inputs: artifactName: 'manifests' targetPath: 'manifests' - stage: deploy jobs: - deployment: 'DeployToK8S' pool: vmImage: 'ubuntu-latest' environment: dev strategy: runOnce: deploy: steps: - task: DownloadPipelineArtifact@1 inputs: buildType: 'current' artifactName: 'manifests' targetPath: '$(System.ArtifactsDirectory)/manifests' - task: KubernetesManifest@0 inputs: action: 'deploy' kubernetesServiceConnection: 'dev-kub-gosample-1558821689026' namespace: 'gosample' manifests: '$(System.ArtifactsDirectory)/manifests/deploy.yaml' containers: '$(registry)/$(imageName):$(Build.BuildId)'
无效的尝试写法
manifests: '$(System.ArtifactsDirectory)/manifests/deploy.yaml','$(System.ArtifactsDirectory)/manifest/ingress-nginx.yaml'
正确实现方式
KubernetesManifest@0任务的manifests参数支持YAML多行列表或空格分隔的字符串,以下是几种可行写法:
写法1:YAML多行列表(推荐,可读性强)
将每个Manifest文件路径单独列为一行:
- task: KubernetesManifest@0 inputs: action: 'deploy' kubernetesServiceConnection: 'dev-kub-gosample-1558821689026' namespace: 'gosample' manifests: | $(System.ArtifactsDirectory)/manifests/deploy.yaml $(System.ArtifactsDirectory)/manifests/ingress-nginx.yaml containers: '$(registry)/$(imageName):$(Build.BuildId)'
注:你之前的路径存在笔误,manifest/ingress-nginx.yaml应为manifests/(多一个s)。
写法2:空格分隔的字符串
在同一个字符串内用空格分隔多个文件路径:
- task: KubernetesManifest@0 inputs: action: 'deploy' kubernetesServiceConnection: 'dev-kub-gosample-1558821689026' namespace: 'gosample' manifests: '$(System.ArtifactsDirectory)/manifests/deploy.yaml $(System.ArtifactsDirectory)/manifests/ingress-nginx.yaml' containers: '$(registry)/$(imageName):$(Build.BuildId)'
写法3:通配符(适用于文件符合命名规律的场景)
如果两个文件都在manifests目录下,可直接用通配符批量匹配:
- task: KubernetesManifest@0 inputs: action: 'deploy' kubernetesServiceConnection: 'dev-kub-gosample-1558821689026' namespace: 'gosample' manifests: '$(System.ArtifactsDirectory)/manifests/*.yaml' containers: '$(registry)/$(imageName):$(Build.BuildId)'
内容的提问来源于stack exchange,提问作者Caio Tavares
相关产品推荐
相关产品推荐

