在Gitlab中,如何在某些情况下手动和自动运行管道

在Gitlab中,如何在某些情况下手动和自动运行管道,gitlab,gitlab-ci,Gitlab,Gitlab Ci,我一直在检查Gitlab工作流,目前有类似的设置: workflow: rules: - if: $CI_MERGE_REQUEST_ID - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH == "master" 这使我可以自动和手动触发管道。但是,我希望在某些情况下可以手动触发作业,也可以自动启动作业,例如: 当PR合并到master时 手动触发 我曾尝试在工作流规则下使用when:manual标志,

我一直在检查Gitlab工作流,目前有类似的设置:

workflow:
  rules:
    - if: $CI_MERGE_REQUEST_ID
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == "master"
这使我可以自动和手动触发管道。但是,我希望在某些情况下可以手动触发作业,也可以自动启动作业,例如:

  • 当PR合并到master时
  • 手动触发
我曾尝试在工作流规则下使用when:manual标志,但根据Gitlab的说法,这不是一个有效的配置

有没有办法做到这一点

完整设置如下所示:

image: "hseeberger/scala-sbt:11.0.6_1.3.10_2.11.12"

services:
  - mysql:latest


connect:
  stage: test
  image: mysql
  script:
    - echo "SELECT 'OK';" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"

workflow:
  rules:
    - if: $CI_MERGE_REQUEST_ID
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == "master"


stages:
  - test
  - release

test:
  script:
    - sbt scalafmtCheckAll test-ci
    - sbt it:test

docker:image:
  stage: release
  image: "hseeberger/scala-sbt:11.0.6_1.3.10_2.11.12"
  

  script:
    - sbt docker:publishLocal
  only:
    - master

我假设您希望为发布阶段运行手动作业,那么您的
docker:image
部分将如下所示:

docker:图像:
阶段:发布
图片:“hseeberger/scala sbt:11.0.6_1.3.10_2.11.12”
脚本:
-sbt docker:publishLocal
规则:
-如果:$CI_COMMIT_BRANCH=='master'
时间:手动

所有作业都应自动启动,并且只有
docker:image
应仅在手动操作时运行

我假设您希望在发布阶段运行手动作业,那么您的
docker:image
部分将如下所示:

docker:图像:
阶段:发布
图片:“hseeberger/scala sbt:11.0.6_1.3.10_2.11.12”
脚本:
-sbt docker:publishLocal
规则:
-如果:$CI_COMMIT_BRANCH=='master'
时间:手动

所有作业都应自动启动,并且只有
docker:image
应仅在手动操作时运行
,当:manual
工作流无效时。您可以在作业级别使用
when
for,它将允许设置
when:manual
以手动运行作业您好,谢谢您的回答,我无法让它工作,在这个设置中它会是什么样子?我将用我的完整设置更新这个问题。嗨,我发布了一个例子,希望它能有所帮助。如果不让我知道:)不完全正确,但最终成功了,谢谢伙计。
when:manual
工作流
无效。您可以在作业级别使用
when
for,它将允许设置
when:manual
以手动运行作业您好,谢谢您的回答,我无法让它工作,在这个设置中它会是什么样子?我将用我的完整设置更新这个问题。嗨,我发布了一个例子,希望它能有所帮助。如果不让我知道:)不完全是,但最终还是成功了,谢谢,伙计。