You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:40:31