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

Extra Artifact published when using templates

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

这导致我的一些部署组出现小问题(解决方法是在下载时忽略它)。虽然它不会造成重大问题,但我只是好奇为什么要发布额外文件并阻止它。

编辑:

包括我的 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'), ne(variables['Build.SourceBranch'], '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(), ne(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.SourceBranch'], '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(), eq(variables['Build.SourceBranch'], '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 任务时的 预期行为

I'm just curious about why the extra file is being published as well as preventing it.

不建议禁用或删除 Publish Symbols 步骤,尽管它有助于删除工件。这个任务对于某些你希望能够调试已发布的 nuget 包的场景非常重要,请查看我的 。所以我的建议是无视它~