如果目录不存在,如何不运行gitlab CI作业



我想写一个模板,包括从我们的全局构建模板,它将复制一个repo的静态文件夹到我的静态服务器。

全局构建模板(build.yml):

stages:
- test
- build
- deploy
include:
...
- local: '/ci-templates/publish_static.yml'
(my-app/.gitlab-ci.yml):
include:
- project: 'mycompany/ci-tools'
file: '/ci-templates/build.yml'

给定回购结构:

my-app
│   .gitlab-ci.yml
└───myapp
└───static

规则是这样的:

publish_static:
stage: deploy
script:
- export STATIC="$(find . -type d -name static)"
- rsync -rvv $STATIC deploy@static.server.com:/www/static

不幸的是,并不是所有的repos都有一个静态文件夹,我找不到使用rules:exists的方法,因为静态文件夹不在与$CI_PROJECT_NAME匹配的子文件夹中。

我尝试使用bash逻辑:

publish_static:
stage: deploy
script:
- export STATIC="$(find . -type d -name static)"
- '[ -d $STATIC ] && rsync -rvv $STATIC deploy@static.server.com:/www/static'

导致[ -d .. ]失效时作业失败。

是否有一种方法来使用rules:exists,我已经忽略了?..或者是否有办法使最后一个命令"成功"?即使$STATIC目录不存在?(我已经添加了allow_failure: true,但我们真的希望我们的管道上完全绿色的复选图标;-)

不是所有的repos都有一个静态文件夹,我找不到一种方法来使用规则:存在,因为静态文件夹不在匹配$CI_PROJECT_NAME的子文件夹中。

:

rules:
- exists:
- '*/static'

参见https://docs.gitlab.com/ee/ci/yaml/#rulesexists中的Additional details

相关内容

  • 没有找到相关文章