PublishPipelineArtifact .artifact 忽略无法识别

kir*_*tha 5 azure-devops azure-pipelines azure-pipelines-release-pipeline azure-artifacts

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

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

当我最初在没有使用代码覆盖率部分的情况下这样做时,IE没有安装节点,发送的文件为 257,略高于 25MB。完全可行且快速。

但是,当我安装 node 并运行代码覆盖率时,文件会爆炸到 750MB,这是可以理解的 - 但恕我直言,作为工件传输太多了。

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

而且,我将其添加到回购的根目录中。

例子

但是,这个文件似乎根本没有使用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'
Run Code Online (Sandbox Code Playgroud)

预期的结果将是一个较小的工件文件,它仍然发布代码覆盖率并安装 node.js 文件。

Sha*_*zyk 6

.artifactignore应在相同的目录中定义为发布管道目标路径伪影任务(不仅在像天青-pipelines.yml回购的根目录)。

是不是在文档和有关于它的问题在这里。也在这里检查。


kir*_*tha 5

好的,所以我使用了 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'
Run Code Online (Sandbox Code Playgroud)

仅供参考 - 这是为 Angular 构建的,所以这是我使用的工件忽略文件。您的里程会根据您的项目而有所不同。

**/dist
**/node_modules
**/coverage
**/.git
Run Code Online (Sandbox Code Playgroud)