使用模板时发布了额外的工件

问题描述

当前在我的大部分管道中都开始使用全局模板,并且出现了一个问题,即除了原始工件之外,还发布了一个空工件。

这在我的某些部署组中引起了一些小问题(解决方法是在下载时忽略它)。虽然它不会引起重大问题,但我只是很好奇为什么要发布额外的文件并加以阻止。

Published Artifact

编辑:

包括了我的yaml模板,用作:

parameters:
  ArtifactPath: ''
  ArtifactName: ''
  ArtifactPublish: false
  Artifacts: []
  Solution: '**/*.sln'

jobs:
- job: Build
  displayName: 'Build,Pack,and Publish'
  pool:
    vmImage: 'windows-latest'
  variables:
    solution: ${{ parameters.solution }}
    buildplatform: 'Any cpu'
    buildConfiguration: 'Release'
    prereleaseVersion: '$(majorVersion).$(minorVersion).$(Build.BuildNumber)-$(Build.sourceBranchName)'
    releaseVersion: '$(majorVersion).$(minorVersion).$(Build.BuildNumber)'
  steps:
  - task: NuGetToolInstaller@1
    displayName: "Install Nuget Tool"
  - task: NuGetCommand@2
    displayName: 'Restore Nuget Packages'
    inputs:
      command: 'restore'
      restoreSolution: '$(solution)'
      FeedsToUse: 'select'
      vstsFeed: 'Feed'
  - task: VSBuild@1
    displayName: 'Build Solution'
    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
    displayName: 'Run Unit Tests'
    inputs:
      platform: '$(buildplatform)'
      configuration: '$(buildConfiguration)'
  - task: NuGetCommand@2
    displayName: 'Pack Prerelease Nuget Packages'
    condition: and(succeeded(),ne(variables['Build.sourceBranch'],'refs/heads/master'),'refs/heads/release'))
    inputs:
      command: 'pack'
      configuration: '$(buildConfiguration)'
      packagesToPack: '**/nuspec/*.nuspec'
      versioningScheme: 'byEnvVar'
      versionEnvVar: prereleaseVersion
      verbosityPack: 'detailed'
  - task: NuGetCommand@2 
    displayName: 'Push Prerelease Nuget Packages'
    condition: and(succeeded(),'refs/heads/release'))
    inputs:
      command: 'push'
      packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg'
      nuGetFeedType: 'internal'
      publishVstsFeed: 'Feed'
      verbosityPush: 'normal'
  - task: NuGetCommand@2
    displayName: 'Pack Release Nuget Packages'
    condition: and(succeeded(),eq(variables['Build.sourceBranch'],'refs/heads/release'))
    inputs:
      command: 'pack'
      configuration: '$(buildConfiguration)'
      packagesToPack: '**/nuspec/*.nuspec'
      versioningScheme: 'byEnvVar'
      versionEnvVar: releaseVersion
      verbosityPack: 'detailed'
  - task: NuGetCommand@2 
    displayName: 'Push Release Nuget Packages'
    condition: and(succeeded(),'refs/heads/release'))
    continueOnError: true
    inputs:
      command: 'push'
      packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg'
      nuGetFeedType: 'internal'
      publishVstsFeed: 'Feed'
      verbosityPush: 'detailed'
  - task: PublishSymbols@2
    displayName: 'Publish Symbols to Symbol Server'
    inputs:
      SearchPattern: '**/bin/**/*.pdb'
      SymbolServerType: 'TeamServices'
  - ${{ if eq(parameters.ArtifactPublish,true) }}:
    - ${{ each artifact in parameters.Artifacts }}:
      - task: copyFiles@2
        displayName: 'copy .artifactignore: ${{ artifact.ArtifactPath }}'
        inputs:
          SourceFolder: '$(Build.sourcesDirectory)'
          Contents: '.artifactignore'
          TargetFolder: '$(Build.sourcesDirectory)/${{ artifact.ArtifactPath }}'
    - ${{ each artifact in parameters.Artifacts }}:
      - task: PublishPipelineArtifact@1
        displayName: 'Publish Artifact: ${{ artifact.ArtifactName }}'
        inputs:
          targetPath: '$(Build.sourcesDirectory)/${{ artifact.ArtifactPath }}'
          artifactName: '${{ artifact.ArtifactName }}'

使用它的Yaml文件

trigger:
  - release
  - development
  - master
  - feature/*
  - task/*

resources:
  repositories:
    - repository: templates
      name: Project/Repo-Name
      type: git
      ref: refs/heads/release
  
variables:
  # This is the version displayed in package manager (Major.Minor.BuildNumber)
  majorVersion: 1
  minorVersion: 1
  
jobs:
- template: Templates/build.yml@templates
  parameters:
    Solution: 'SolutionName'
    ArtifactPublish: true
    Artifacts:
    - ArtifactPath: 'bin/directory/$(buildConfiguration)'
      ArtifactName: 'ArtifactName'

解决方法

您的模板中有一个Publish Symbols任务,此任务将使用随机名称将符号发布到Azure Artifacts中的符号服务器。这就是为什么我们可以在Published选项卡中看到额外的工件的原因,它是使用PublishSymbols@2任务时的预期行为

enter image description here

我很好奇为什么还要发布额外的文件 作为预防措施。

不建议禁用或删除Publish Symbols步骤,尽管它有助于删除工件。对于某些需要调试已发布的nuget程序包的功能,请检查我的another similar issue,此任务非常重要。所以我的建议就是忽略它〜