-1

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

我的第一个构建使用以下 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 客户端项目。

谢谢!

4

2 回答 2

1

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

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

1

其次,我想知道您为什么要使用通配符,因为该任务VSBuild@1只会将包放在build.artifactStagingDirectory应该使路径$(build.artifactStagingDirectory)/projectToPublish.zip找到包的路径中。

于 2020-05-22T14:05:00.810 回答
0

AzureRmWebAppDeployment@4你有

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

PublishPipelineArtifact@1你有一个不同的名字

'$(build.artifactStagingDirectory)/**/projectToPublish.zip'
于 2020-05-22T12:19:53.447 回答