AKS Kubectl 任务的 Azure devops 管道无法将清单部署到 AKS

Azure devops pipeline for AKS Kubectl task failing to deploying manifest into AKS

kubectl 任务未能将清单文件部署到 AKS 中。管道失败并出现以下错误

##[错误]未找到匹配 /home/vsts/work/1/s/manifests 的配置文件。

管道在 运行 这两个阶段(如构建和部署)都运行良好,因为在构建阶段之后,它将为该清单文件创建工件,并将在部署阶段下载并部署到 AKS 中。

如果我 select 阶段到 运行 仅用于部署阶段,我会出现问题,它将失败并显示上述错误消息..

流水线

- master

resources:
- repo: self

variables:
  tag: '$(Build.BuildId)'
  imagePullSecret: 'aks-acr-auth'

stages:
- stage: Build
  displayName: Build image
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: Docker@2
      displayName: Build And Push Into ACR
      inputs:
        containerRegistry: 'AKS-ACR'
        repository: 'apps/web'
        command: 'buildAndPush'
        Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'
        tags: |
          $(tag)

    - publish: manifests
      artifact: manifests
        
- stage: 'Deployment'
  displayName: 'Deploy To AKS'
  jobs:
    - deployment: Release
      environment: 'DEV-AKS.default'
      displayName: 'Release'
      pool:
        vmImage: ubuntu-latest
      strategy:
        runOnce:
          deploy:
            steps:

            - task: KubernetesManifest@0
              displayName: Create imagePullSecret
              inputs:
                action: 'createSecret'
                kubernetesServiceConnection: 'DEV-AKS'
                secretType: 'dockerRegistry'
                secretName: '$(imagePullSecret)'
                dockerRegistryEndpoint: 'AKS-ACR'

            - task: DownloadPipelineArtifact@2
              inputs:
                buildType: 'current'
                artifactName: 'manifests'
                targetPath: '$(Pipeline.Workspace)'

            - task: Kubernetes@1
              displayName: Deploying Manifests into AKS
              inputs:
                connectionType: 'Kubernetes Service Connection'
                kubernetesServiceEndpoint: 'DEV-AKS'
                namespace: 'default'
                command: 'apply'
                useConfigurationFile: true
                configuration: 'manifests'
                secretType: 'dockerRegistry'
                containerRegistryType: 'Azure Container Registry'
- master

resources:
- repo: self

variables:
  tag: '$(Build.BuildId)'
  imagePullSecret: 'aks-acr-auth'

- stage: 'Deployment'
  displayName: 'Deploy To AKS'
  jobs:
    - deployment: Release
      environment: 'DEV-AKS.default'
      displayName: 'Release'
      pool:
        vmImage: ubuntu-latest
      strategy:
        runOnce:
          deploy:
            steps:

            - checkout: self
            - task: KubernetesManifest@0
              displayName: Create imagePullSecret
              inputs:
                action: 'createSecret'
                kubernetesServiceConnection: 'DEV-AKS'
                secretType: 'dockerRegistry'
                secretName: '$(imagePullSecret)'
                dockerRegistryEndpoint: 'AKS-ACR'

            - task: Kubernetes@1
              displayName: Deploying Manifests into AKS
              inputs:
                connectionType: 'Kubernetes Service Connection'
                kubernetesServiceEndpoint: 'DEV-AKS'
                namespace: 'default'
                command: 'apply'
                useConfigurationFile: true
                configuration: '$(Build.SourcesDirectory)/manifests'
                secretType: 'dockerRegistry'
                containerRegistryType: 'Azure Container Registry'

你能用上面的管道yaml检查一下吗?更改工件下载位置并添加 Build.SourcesDirectory 作为下载工件的路径

根据 Kasun 的评论,我在管道中添加了 -checkout: self 和 $(Build.SourcesDirectory) 它是有效的..

流水线


- master

resources:
- repo: self

variables:
  imagePullSecret: 'acr-auth'

stages:
        
- stage: 'Deployment'
  displayName: 'Deploy To AKS'
  jobs:
    - deployment: Release
      environment: 'DEV-AKS.default'
      displayName: 'Release'
      pool:
        vmImage: ubuntu-latest
      strategy:
        runOnce:
          deploy:
            steps:
            - checkout: self

            - task: KubernetesManifest@0
              displayName: Create imagePullSecret
              inputs:
                action: 'createSecret'
                kubernetesServiceConnection: 'DEV-AKS'
                secretType: 'dockerRegistry'
                secretName: '$(imagePullSecret)'
                dockerRegistryEndpoint: 'AKS-ACR'

            - script: dir $(Build.SourcesDirectory)/manifests
              displayName: Cloning Manifest Files From Repo
              
            - task: KubernetesManifest@0
              displayName: Deploying Manifests InTo AKS
              inputs:
                action: 'deploy'
                kubernetesServiceConnection: 'DEV-AKS'
                namespace: 'default'
                manifests: |
                  manifests/deployment.yml
                  manifests/service.yml
                imagePullSecrets: '$(imagePullSecret)'