PublishPipelineArtifact .artifact忽略无法识别

时间:2019-07-15 15:35:52

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline azure-artifacts

我正在使用Azure DevOps构建管道将工件发送到发布管道。我的构建管道如下:

  1. 使用NodeTool@0
  2. 安装Node JS
  3. 运行运行npm install的脚本命令,然后运行测试套件。
  4. 通过PublishCodeCoverageResults@1
  5. 发布代码覆盖率结果
  6. 使用PublishPipelineArtifact@1targetPath: '$(Pipeline.Workspace)'作为工件目录发布工件。

当我最初不使用代码覆盖部分(即IE not 安装节点)来执行此操作时,发送的文件为257,略大于25MB。完全可行且快捷。

但是,当我安装节点并运行代码覆盖时,文件爆炸到750MB,这是可以理解的-但是,作为工件恕我直言,它实在是太多了。

因此,通过查看解决方案,我发现了这一点:https://docs.microsoft.com/en-us/azure/devops/artifacts/reference/artifactignore?view=azure-devops

然后,我将其添加到了回购的根目录中。

Example

但是,使用PublishPipelineArtifact@1似乎完全没有改变该文件。不管我做什么,工作区中的所有文件都被用作工件。

虽然有效,但实际上是在构建过程中删除了文件。

我意识到这是一个问题的很多细节,但是我想知道.artifactignore文件是否真正适用于此构建管道?

有没有一种方法可以正确使用工件忽略文件,而不必担心在创建工件之前删除文件?

试图在PublishPipelineArtifact@1任务中更改目标目录。

以下是当前有效的YAML:

# Node.js with Angular
# Build a Node.js project that uses Angular.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run test:devops
  displayName: 'npm install and test'

- task: PublishCodeCoverageResults@1
  displayName: 'publish ng code coverage results'
  condition: succeededOrFailed()
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: 'coverage/cobertura-coverage.xml'
    reportDirectory: coverage
    failIfCoverageEmpty: true

- task: DeleteFiles@1
  inputs:
    SourceFolder: '$(Pipeline.Workspace)/s'
    Contents: |
      node_modules
      coverage

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    artifact: 'my-artifact'

预期结果将是一个较小的工件文件,该文件仍会发布代码覆盖并安装节点。

2 个答案:

答案 0 :(得分:1)

.artifactignore应该位于与发布管道工件任务的目标路径相同的目录中(不仅在存储库的根目录中,例如azure-pipelines.yml)。

不在文档中,并且与此有关的问题here。还要检查here

答案 1 :(得分:0)

好吧,所以我使用了Shayki Abramczyk的信息-这是正确的答案-但我想为所有人提供一个正常工作的Yaml。我不得不从仓库中复制我的.artifactignore文件:$(Pipeline.Workspace)/ s到根目录$(Pipeline.Workspace)

我这样做后-它立即显示出结果。一旦我调整了工件忽略文件,输出就会从750 + MB减少到2.3MB并在8秒内处理完毕。

正在使用YAML:

- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run test
  displayName: 'npm install and test'

- task: PublishCodeCoverageResults@1
  displayName: 'publish ng code coverage results'
  condition: succeededOrFailed()
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: 'coverage/cobertura-coverage.xml'
    reportDirectory: coverage
    failIfCoverageEmpty: true

- task: CopyFiles@2
  inputs:
    SourceFolder: '$(Pipeline.Workspace)/s'
    Contents: '**/.artifactignore'
    TargetFolder: '$(Pipeline.Workspace)'

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    artifact: 'my-artifact'

仅供参考-这是针对角度构建的,因此这是我使用的工件忽略文件。您的里程会因您的项目而异。

**/dist
**/node_modules
**/coverage
**/.git