由于磁盘空间限制,我想在几个小时内使我的工件过期。
Gitlab-CI通过在expire_in
中定义时间来支持这一点。
这很有效,但我有一个手动部署步骤(单击按钮开始部署)。部署基本上将webroot rsyncs到服务器。问题是工件何时到期(在此示例中为3小时后)。如果您点击手动部署按钮,将会抛出错误,因为webroot
工件不再存在。之前的步骤需要在部署之前重建。所有这一切都是完全可以理解的,但是必须通读错误日志以找出部署失败的原因是不方便的。
我想禁用手动步骤(使按钮不可点击),当它所依赖的工件不再可用时。有没有选择来实现这个目标?
gitlab-ci.yaml
stages:
- build frontend
- build backend
- deploy
before_script:
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
npm build:
stage: build frontend
image: node:6
script:
- cd build
- yarn install
- npm run build:prod
artifacts:
paths:
- profile/
expire_in: 1 hour
drupal build:
stage: build backend
image: drupaldocker/drush:8
dependencies:
- npm build
script:
- sudo apt-get update
- sudo apt-get install unzip
- cd webroot
- drush make drupal.make.yml -y
- rm -r sites
artifacts:
paths:
- webroot/
expire_in: 3 hours
staging deploy:
stage: deploy
image: drupaldocker/drush:8
dependencies:
- drupal build
- npm build
script:
- export SSH_ENV_DIR="master1/drupal"
- bash bin/gitlab/deploy.sh
when: manual
environment:
name: staging
答案 0 :(得分:0)
您应该尝试使用最新的gitlab版本,现在应该显示原因。 (v11.2)
答案 1 :(得分:0)
我不相信当前有任何功能。您可以填写功能请求问题here,但很长一段时间都不会添加(如果有的话)。 issue中还有另一个类似的请求,如果不存在工件,则作业将完全失败,但是看起来好像没有很多活动。
如果您是付费客户,则可以向其支持团队请求该功能,从而使事情的处理速度更快。
但是,您可以通过在script
部分(或before_script
)的顶部添加一个检查来模拟上述问题将实现的功能(如果之前提取了工件,则无法回忆起何时提取)以检查您期望的文件/目录是否存在。如果没有,则失败并显示一条消息,说明应重新运行构建步骤。可能看起来像这样:
...
script:
- [ -d required_dir ] || MISSING=true
# or
- [ -f required_file ] || MISSING=true
- if [ $MISSING ]; then
echo "Required artifact is missing. Please re-run step XYZ."
exit 1
fi
- # continue as normal since artifact(s) exist