由计划触发的 GitLab 手动作业

zee*_*erk 2 schedule pipeline manual gitlab gitlab-ci

我的 GitLab 管道有一点问题。
我想使用计划规则运行手动作业,或者找到一种方法在我的作业中运行计划管道而无需重写管道。

正如您在示例中看到的,我有 2 个第一份工作标记为工作。一种是手动的,一种是计划的。我的问题是,如果我运行计划的工作流程,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"

Run Code Online (Sandbox Code Playgroud)
有可能以某种方式解决这个问题吗?
有人遇到过这个问题吗?

Den*_*rev 8

有一种方法可以使用 来做到这一点only:,但我建议转向rules:asonly:将被弃用。所以你不需要两个条件不同的作业,你可以做一个分支条件:

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"
Run Code Online (Sandbox Code Playgroud)

有了它,管道会检查作业是否由计划调用并运行。如果没有,则留下manual

*我可以自由地选择MR 风格的工作流程以避免双管道。