由计划触发的 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 以避免双重管道。