GitLab CI/CD工件排除不工作



我的.gitlab-ci.yml文件的工件部分是:

script:
- echo "creating artifact"    
artifacts:
name: "<name of my project>"
paths:
- $CI_PROJECT_DIR
exclude:
- $CI_PROJECT_DIR/deploy/*
- $CI_PROJECT_DIR/git/*

但是,我想排除的文件仍然包括在内;当我从git下载工件时,deploy文件夹和.git文件夹及其内容都会出现。尽管git被排除在外,但在运行管道的工件阶段时,我也会收到这个警告:WARNING: Part of .git directory is on the list of files to archive。我曾尝试将其从$CI_PROJECT_DIR/git/*更改为$CI_PROJECT_DIR/.git/*,但这会使工件变得更大(太大以至于管道失败,我无法下载工件(。

我还尝试从文件路径中删除/*,并将其更改为/**/*,但都没有解决问题。一件非常零散的事情是,有时第一条路径结束时工件会更小,有时移除后工件会更小。

我如何解决这个问题,以便排除正确的文件,并且工件不会那么大?或者我还能做些什么来缩小这个工件吗?

必须排除文件夹本身及其内容。只有这个对我有效:

artifacts:
paths:
- ./
exclude:
- .git
- .git/**/*

GitLab作业日志的结果:

...
Uploading artifacts...
./: found 9924 matching files and directories      
.git: excluded 1 files                             
.git/**/*: excluded 31 files
...

我遇到了同样的问题。我发现exclude中的路径需要相对于$CI_PROJECT_DIR,因此必须从排除路径中删除该部分。

最后的工作方式是:

script:
- echo "creating artifact"    
artifacts:
name: "<name of my project>"
paths:
- $CI_PROJECT_DIR
exclude:
- deploy/**/*
- .git/**/*

您可以在GitLab文档中更深入地了解exclude关键字的使用。正如你将在文档中看到的:

artifacts:paths不同,exclude路径不是递归的。要排除目录的所有内容,请显式匹配它们,而不是匹配目录本身。

所以你的.gitlab-ci.yml应该看起来像:

script:
- echo "creating artifact"    
artifacts:
name: "<name of my project>"
paths:
- $CI_PROJECT_DIR
exclude:
- $CI_PROJECT_DIR/deploy/**/*
- $CI_PROJECT_DIR/git/**/*

我认为您只是错过了git目录名称中的点(.(。此外,如其他答案所述,使用glob语法:

exclude:
- $CI_PROJECT_DIR/.git/**/*

最新更新