使用 .artifactignore 排除文件夹

Exclude a folder with .artifactignore

我正在构建一个管道,我的暂存目录如下所示:

.
└── a
    ├── b
    │   ├── c   <-- exclude everything under this
    │   │   └── d
    │   │       ├── big_file_1
    │   │       └── big_file_2
    │   ├── file_1
    │   └── file_2
    ├── file_3
    └── file_4

我想要的是从我的工件中排除 c 下的所有内容。 c下的文件可以深度嵌套,层数不可预测。我了解到 .artifactignore,虽然宣传它像 .gitignore 一样工作,但绝非如此。如果我想排除 c,我在 .gitignore 中要做的就是:

**/c

我试过了,加上 .artfifactignore 中的无数其他模式,但无法正常工作。如果您想重现问题,这里有一个 YAML 管道:

steps:
  - bash: |
      mkdir -p a/b/c/d
      touch a/b/c/d/big_file_1
      touch a/b/c/d/big_file_2

      touch a/b/file_1
      touch a/b/file_2
      touch a/file_3
      touch a/file_4

      echo > .artifactignore <<EOF
      **/c
      **/c/*
      **/c/**
      **/c/**/*
      a/b/c/**
      **/big*
      EOF

      tree
    workingDirectory: $(Build.StagingDirectory)

  - publish: $(Build.StagingDirectory)
    name: drop
    displayName: Publish

None 个模式有效!我应该如何用 .artifactignore 排除 c 目录?

我在您的管道中做了一些非常小的更新(“cat”而不是“echo”),对我来说效果很好。

我的管道:

trigger:
  - none

stages:
  - stage: first
    jobs: 
     - job: firstJob
       continueOnError: false
       steps:
         - bash: |
             mkdir -p a/b/c/d
             touch a/b/c/d/big_file_1
             touch a/b/c/d/big_file_2

             touch a/b/file_1
             touch a/b/file_2
             touch a/file_3
             touch a/file_4

             cat > .artifactignore <<EOF
             **/c
             EOF
             
             tree
           workingDirectory: $(Build.StagingDirectory)
         - publish: $(Build.StagingDirectory)
           name: drop
           displayName: Publish

树的输出:


已发布的工件:


参考文献: