GitLab手动作业失败,自动作业成功



我找不到一个令人满意的解决方案。

我只想在某个先前作业失败时手动启动作业。有问题的工作是一种验证。我想制作下一个工作手册,让用户承认有些地方不好,并让他调查问题,只有在他认为可以忽略失败的情况下才能继续。

stages:
- test
- validate
- build
lint:
stage: test
allow_failure: true
script:
- npm run lint
check:reducer:
stage: test
allow_failure: true
script:
- chmod +x ./check-reducers.py
- ./check-reducers.py $CI_PROJECT_ID $CI_COMMIT_BRANCH
except:
- master
- development
fail:pause:
stage: validate
allow_failure: true
script:
- echo The 'validate:reducer' job has failed
- echo Check the job and decide if this should continue
when: manual
needs: ["check:reducer"]
build:
stage: build
script:
- cp --recursive _meta/ $BUILD_PATH
- npm run build
artifacts:
name: "build"
expire_in: 1 week
paths:
- $BUILD_PATH
needs: ["fail:pause"]

我希望如果check:reducer失败,fail:pause等待用户输入。如果check:reducer以0退出,则fail:pause应自动启动,或者build应启动。

不幸的是,这是不可能的,因为when关键字是在管道的一开始(即,在任何作业执行之前(计算的,因此您无法根据以前的作业状态设置when条件。

如果使用生成的gitlab-ci.yml作为子工作流,则这是可能的。

stages:
- test
- approve
- deploy
generate-config:
stage: test
script:
- ./bin/run-tests.sh
- ./bin/generate-workflows.sh $?
artifacts:
paths:
- deploy-gitlab-ci.yml

trigger-workflows:
stage: deploy 
trigger:
include:
- artifact: deploy-gitlab-ci.yml
job: generate-config

generate-workflows.sh脚本编写一个deploy-gitlab-ci.yml,它具有批准作业或不基于作为第一个参数传递给脚本的run-test.sh的返回代码。

您可以使用includes让自己更轻松,其中您可以在生成的deploy-gitlab-ci.yml文件中包含或不包含批准步骤,并使deploy中的步骤可选地需要批准。

批准-gitlab-ci.yml

approve:
stage: approve
when: manual
script:
- echo "Approved!"

部署gitlab-ci.yml

deploy:
stage: deploy
needs:
- job: approve
optional: true

然后deploy-gitlab-ci.yml只是一个包含要运行的作业的包:

includes:
- approve-gitlab-ci.yml
- deploy-gitlab-ci.yml

最新更新