Время выполнения Gitlab CI для разных этапов

#continuous-integration #gitlab #gitlab-ci

#непрерывная интеграция #gitlab #gitlab-ci

Вопрос:

Бьюсь об заклад, это просто какая-то глупость, которую я упускаю, но как мне создать свой файл gitlab-ci.yml и расписания, чтобы каждый вечер выполнялось несколько этапов (ночное тестирование) и один этап для выполнения один раз в выходные (еженедельный набор тестов)?

В настоящее время у меня такая настройка: все этапы, которые я хочу выполнять каждую ночь, похожи, меняются только имена ofc.

 stage1:
  stage: stage1
  only:
  - schedules

  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here
  

У меня также есть расписание для ночного выполнения, которое отлично запускает выполнение в 18: 00 вечера.

Тогда у меня есть этап, который я хочу выполнять один раз в неделю в субботу в 10 утра:

 stagex:
  stage: stagex
  only:
  - schedules
    - cron 0 10 * * 6

  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here
  

Это не сработало в прошлую субботу. На стороне пользовательского интерфейса нет отдельного расписания. Должен ли я иметь это там? Есть какие-либо указания о том, как заставить это работать?

Также я хотел бы иметь возможность выполнять этап x (еженедельно) с помощью кнопки, поэтому для этого потребуется расписание. Это может быть оставлено неактивным ofc, если gitlab запускает его другими способами. Я пробовал это с установкой переменных для этапов и наличием их на стороне пользовательского интерфейса, но у меня не получилось, чтобы это работало таким образом.

Есть что-то, чего мне точно не хватает…

Ответ №1:

Если я понял вашу цель, вы хотите

  • выполняйте этап 1 только по расписанию (ежедневно)
  • выполняйте stagex только по расписанию (еженедельно) или при запуске конвейера вручную.

Следующее должно выполнить это. Вам нужно будет установить ежедневные и еженедельные расписания. Для еженедельного расписания вам нужно будет определить SCHEDULED_JOB как «stagex»; как только расписание установлено, вы можете нажать play на нем, чтобы вручную запустить задание.

 variables:
  SCHEDULED_JOB: "stage1"

stage1:
  stage: stage1
  rules:
   - if: '$CI_PIPELINE_SOURCE == "schedule" amp;amp; $SCHEDULED_JOB == $CI_JOB_NAME'

  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here
     
    
stagex:
  stage: stagex
    - if: '$CI_PIPELINE_SOURCE == "schedule" amp;amp; '$SCHEDULED_JOB == $CI_JOB_NAME'
  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here