发布管道工件以在另一个管道中使用

Publishing Pipeline Artifacts for use in another pipeline

我试图在构建期间发布几个管道工件,以便我可以在另一个解决方案的构建中使用它们。

我的第一个构建使用以下 yaml 构建和测试解决方案

- stage: build_test_release
    displayName: Build
    pool:
      vmImage: 'windows-latest'
    variables:
      solution: '**/*.sln'
      buildPlatform: 'Any CPU'
      buildConfiguration: 'Release'

    jobs:
      - job: build
        steps:
        - task: NuGetToolInstaller@1
        - task: NuGetCommand@2
          inputs:
            restoreSolution: '$(solution)'
        - task: VSBuild@1
          inputs:
            solution: '$(solution)'
            msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
            platform: '$(buildPlatform)'
            configuration: '$(buildConfiguration)'
        - task: VSTest@2
          inputs:
            platform: '$(buildPlatform)'
            configuration: '$(buildConfiguration)'

这一切都很好,我已经能够在同一个文件中使用这个 yaml 进行部署

    - task: AzureRmWebAppDeployment@4
      inputs:
        ConnectionType: 'AzureRM'
        azureSubscription: 'azuresubscription'
        appType: 'webApp'
        WebAppName: 'webappname'
        deployToSlotOrASE: true
        ResourceGroupName: 'resourcegroupname'
        SlotName: 'staging'
        packageForLinux: '$(build.artifactStagingDirectory)/**/projectToPublish.zip'

我现在正在尝试发布一些构建为管道工件的项目,以便我可以在构建另一个引用它们的解决方案时使用它们。以下发布任务给我错误:

"##[错误]路径不存在:D:\a\a**\projectToPublish.zip"

    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(build.artifactStagingDirectory)/**/projectToPublish.zip'
        artifact: 'artifactname'
        publishLocation: 'pipeline'

我在这里错过了什么?我一直在考虑将两个解决方案引用的项目移动到他们自己的解决方案中,并将它们添加为 nuget 包或类似的东西。我试图发布为要在第二个解决方案中使用的工件的项目都是 WCF 客户端项目。

谢谢!

AzureRmWebAppDeployment@4 你有

'$(build.artifactStagingDirectory)/**/WebProjectToPublish.zip'

而在 PublishPipelineArtifact@1 你有不同的名字

'$(build.artifactStagingDirectory)/**/projectToPublish.zip'

问题是您正在使用的任务 Publish Pipeline Artifacts 不支持 'File or directory path' 参数的通配符。对于此任务,$(build.artifactStagingDirectory) 被替换为 D:\a\a\,在第二个名为 a 的目录中,Azure DevOps 正在查找名为 ** 的子目录,该目录不存在并导致显示的错误.您正在使用的另一个任务 AzureRmWebAppDeployment@4 支持通配符。

参见下图,其中 Azure DevOps 在 UI 中显示 PublishPipelineArtifact@1 任务不支持 targetPath 中的通配符:

其次,我想知道你为什么要使用通配符,因为任务 VSBuild@1 只会将包放入 build.artifactStagingDirectory 中,这应该使路径 $(build.artifactStagingDirectory)/projectToPublish.zip 定位包裹。