我的.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/**/*