我想写一个模板,包括从我们的全局构建模板,它将复制一个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
。