Ручная работа GitLab, запускаемая по расписанию

У меня небольшая проблема с моим конвейером 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"


Is there a possibility to solve this problem somehow?
Did somebody ever suffer from this problem?

person zeerk    schedule 29.09.2020    source источник


Ответы (1)


Есть способ сделать это с 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, чтобы избежать двойных конвейеров.

person Denis Pisarev    schedule 29.09.2020
comment
Спасибо! Это то, что я ищу! Я очень признателен! - person zeerk; 30.09.2020