#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