发布管道工件以供其他管道使用

时间:2020-05-22 11:46:35

标签: azure-devops azure-pipelines azure-pipelines-build-task azure-artifacts azure-pipelines-yaml

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

我的第一个构建版本使用以下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 \ 1 \ a ** \ projectToPublish.zip”

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

我在这里想念什么?我一直在考虑将两个解决方案所引用的项目移入他们自己的解决方案,并将它们添加为nuget包或类似的东西。我尝试发布为要在第二个解决方案中使用的工件的项目都是WCF Client项目。

谢谢!

2 个答案:

答案 0 :(得分:0)

AzureRmWebAppDeployment@4中,您拥有

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

PublishPipelineArtifact@1中,您使用另一个名称

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

答案 1 :(得分:0)

问题是您正在使用的任务“发布管道工件”不支持“文件或目录路径”参数的通配符。对于此任务,$(build.artifactStagingDirectory)D:\a\1\a\取代,在名为a的第二个目录中,Azure DevOps正在寻找一个名为**的子目录,该子目录不存在并导致显示的错误。您正在使用的其他任务AzureRmWebAppDeployment@4确实支持通配符。

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

1

第二,我想知道为什么您使用通配符,因为任务VSBuild@1只会将包放在build.artifactStagingDirectory中,这将使路径$(build.artifactStagingDirectory)/projectToPublish.zip定位到该包