【问题标题】:devops pipeline fails, artifact not founddevops 管道失败,找不到工件
【发布时间】:2022-12-09 13:50:38
【问题描述】:

我有一个发布输出的 azure devops 管道,

pool:
vmImage: 'windows-latest'
steps:
- script: |
    dotnet restore
    dotnet build --configuration Release
- task: DotNetCoreCLI@2
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: 'MyProject/*.csproj'
    publishWebProjects: false
    modifyOutputPath: false
    zipAfterPublish: false
- task: ArchiveFiles@2
  displayName: "Archive files"
  inputs:
    rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/myapp.zip"
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/myapp.zip'
    artifactName: 'myapp'

这有效。

另一个发布管道应该使用构建生成的工件,

trigger:
- main

variables:
  azureSubscription: MySubscription
  appName: myAppName
  vmImageName: 'ubuntu-latest'

steps: 

- task: DownloadBuildArtifacts@1
  inputs:
    buildType: 'current'
    downloadType: 'single'
    artifactName: 'myapp'
    downloadPath: '$(Build.ArtifactsDirectory)'
- task: AzureFunctionApp@1 # Add this at the end of your file
  inputs:
    azureSubscription:  $(azureSubscription)
    appType: functionApp # default is functionApp
    appName: $(appName)
    package: $(Build.ArtifactsDirectory)/**/*.zip

但这在 DownloadBuildArtifacts 任务中已经失败并出现错误:

##[error]Artifact myapp was not found for build xy.

我可以在日志中看到工件放置在某个文件夹中,

Upload 'D:\a\1\s\myapp.zip' to file container: '#/29596927/myapp'

但是没有信息 DownloadBuildArtifacts 任务在哪个位置搜索工件(至少我没有找到它,即使在管道运行中启用了分析)。我应该替换“Build.ArtifactsDirectory”还是其他地方有问题?

【问题讨论】:

    标签: devops pipeline azure-artifacts


    【解决方案1】:

    您必须在变量之前或之后将资源定义到其他构建管道:

    resources:
      pipelines:
        - pipeline: referenceNameOfBuildPipeline
          source: BuildPipelineName
    
      # similarly, referencing another repo source
      repositories:
        - repository: referenceNameOfRepo
          type: git
          name: RepoName
    

    然后您可以在下载或结帐步骤中使用参考名称:

    steps
      - checkout: self
      - checkout: referenceNameOfRepo
    
      - download: referenceNameOfBuildPipeline
        artifact: 'myApp'
        displayName: 'Downloading myApp'
    
      - task: ExtractFiles@1
        displayName: "Extracting Build Artifacts"
        inputs:
          archiveFilePatterns: "$(Pipeline.Workspace)/**/myapp.zip"
          destinationFolder: '$(Build.BinariesDirectory)'
    

    【讨论】:

      【解决方案2】:

      ##[错误]找不到构建 xy 的工件 myapp。

      从您的 YAML 示例中,问题的原因是您需要从构建管道下载工件,但在发布管道中,您添加 DownloadBuildArtifacts 任务以下载当前发布管道工件。

      构建类型:'当前'

      由于发布管道中不存在构建工件,因此会导致问题。

      要解决此问题,您需要修改 DownloadBuildArtifacts 任务定义以下载构建管道工件。

      例如:

      steps:
      - task: DownloadBuildArtifacts@1
        displayName: 'Download Build Artifacts'
        inputs:
          buildType: specific
          project: 'projectname'
          pipeline: 'Pipelinename or PipelineID'
          artifactName: 'myapp'
          downloadPath: '$(Build.ArtifactsDirectory)'
      

      在这种情况下,它将下载 Build Pipeline 的工件。

      更详细的信息可以参考文档:DownloadBuildArtifacts@1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-26
        • 2020-09-17
        • 2021-10-25
        • 2021-07-28
        • 1970-01-01
        • 2019-10-06
        相关资源
        最近更新 更多