由计划触发的 GitLab 手动作业
GitLab manual job triggered by schedule
我的 GitLab 管道有点问题。
我想 运行 一个带有预定规则的手动作业,或者想 运行 一个带有我的作业的预定管道而不重写管道。
如您在示例中所见,我有 2 个 firstjob 标记的工作。一种是手动的,一种是计划的。我的问题是,如果我 运行 计划的工作流程,AC 测试将不会开始,如果我尝试 运行 FirstJob 按计划规则,它赢了'开始是因为 when: manual
部分。
这是我的例子:
stages:
- firstjob
- test
- build
- deploy
FirstJob:
stage: firstjob
script:
- echo "Hello Peoples!"
- sleep 1
when: manual
allow_failure: false
FirstJobSchedule:
stage: firstjob
script:
- echo "Hello Scheduled Peoples!"
- sleep 1
only:
- schedule
allow_failure: false
AC-test:
needs: [FirstJob]
stage: test
script:
- echo "AC Test is running"
- sleep 10
ProdJobBuild:
stage: build
needs: [AC-test]
script:
- echo "Building thing to prod"
ProdJobDeploy:
stage: deploy
needs: [ProdJobBuild]
script:
- echo "Deploying thing to prod"
有没有可能以某种方式解决这个问题?
有人遇到过这个问题吗?
only:
有一种方法可以做到这一点,但我建议改用 rules:
,因为 only:
将被弃用。
所以你不需要两个不同条件的工作,你可以做一个分支条件:
stages:
- firstjob
- test
- build
- deploy
workflow:
rules:
- if: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
FirstJob:
stage: firstjob
script:
- echo "Hello Peoples!"
- sleep 1
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
# when: always # is a default value
- when: manual
# allow_failure: false # is a default value
AC-test:
needs: [FirstJob]
stage: test
script:
- echo "AC Test is running"
- sleep 10
ProdJobBuild:
stage: build
needs: [AC-test]
script:
- echo "Building thing to prod"
有了它,管道会检查作业是否被调度调用,然后运行。
如果不是,则保持 manual
.
*我自由选择了 MR-style of workflow 以避免双重管道。
我的 GitLab 管道有点问题。
我想 运行 一个带有预定规则的手动作业,或者想 运行 一个带有我的作业的预定管道而不重写管道。
如您在示例中所见,我有 2 个 firstjob 标记的工作。一种是手动的,一种是计划的。我的问题是,如果我 运行 计划的工作流程,AC 测试将不会开始,如果我尝试 运行 FirstJob 按计划规则,它赢了'开始是因为 when: manual
部分。
这是我的例子:
stages:
- firstjob
- test
- build
- deploy
FirstJob:
stage: firstjob
script:
- echo "Hello Peoples!"
- sleep 1
when: manual
allow_failure: false
FirstJobSchedule:
stage: firstjob
script:
- echo "Hello Scheduled Peoples!"
- sleep 1
only:
- schedule
allow_failure: false
AC-test:
needs: [FirstJob]
stage: test
script:
- echo "AC Test is running"
- sleep 10
ProdJobBuild:
stage: build
needs: [AC-test]
script:
- echo "Building thing to prod"
ProdJobDeploy:
stage: deploy
needs: [ProdJobBuild]
script:
- echo "Deploying thing to prod"
有没有可能以某种方式解决这个问题?
有人遇到过这个问题吗?
only:
有一种方法可以做到这一点,但我建议改用 rules:
,因为 only:
将被弃用。
所以你不需要两个不同条件的工作,你可以做一个分支条件:
stages:
- firstjob
- test
- build
- deploy
workflow:
rules:
- if: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
FirstJob:
stage: firstjob
script:
- echo "Hello Peoples!"
- sleep 1
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
# when: always # is a default value
- when: manual
# allow_failure: false # is a default value
AC-test:
needs: [FirstJob]
stage: test
script:
- echo "AC Test is running"
- sleep 10
ProdJobBuild:
stage: build
needs: [AC-test]
script:
- echo "Building thing to prod"
有了它,管道会检查作业是否被调度调用,然后运行。
如果不是,则保持 manual
.
*我自由选择了 MR-style of workflow 以避免双重管道。