Как запустить конкретную работу в GitLab CI
мы столкнулись с проблемой, когда нам нужно запустить одно конкретное задание в GitLab CI. В настоящее время мы не знаем, как решить эту проблему. Мы multitple рабочих мест определена в нашем .gitlab-ci.yml
но нам нужно запустить только одно задание в наших конвейерах. Как мы могли просто запустить одну работу, например job1
или job2
? Мы не можем использовать tags
или branches
как программный коммутатор в нашей среде.
.gitlab-ci.в формате YML:
before_script:
- docker info
job1:
script:
- do something
job2:
script:
- do something
3 ответов
добавить when: manual
к заданиям, которые вы не хотите запускать.
эти задания по-прежнему будут отображаться в вашем конвейере, но не будут выполняться, если кто-то "вручную" не запустит их через веб-интерфейс, отсюда и название.
вот подробнее об этом: https://docs.gitlab.com/ce/ci/yaml/README.html#when
если вы ищете что-то более "программируемое", скажем, запустите либо job1
или job2
в зависимости от имени филиала или тег, то вы должны взглянуть на only
и except
ключевые слова:https://docs.gitlab.com/ce/ci/yaml/README.html#only-and-except
мы столкнулись с той же проблемой в прошлом, и я делюсь с вами нашим решением.
Примечание
- я прочитал ответ Джавад и я нашел его хорошим, и мы попробовали его, когда столкнулись с проблемой.
- мое замечание заключается в том, что добавление
when: manual
всегда будет показывать все ваши задания в конвейере. - поэтому, если вы работаете в большой команде, вы не можете запретить другим сотрудникам нажимать по ошибке или по ошибке на работу, которую вы не хочу быть запущен.
что я предполагаю, прежде чем продолжить
- предположим, что у вас есть 4 работы.
- вам нужно всегда запускать (вручную или автоматически)
job 1
,job 2
иjob 4
а неjob3
. - вы хотите работать только
job 3
в конкретном случае или только когда вы решите запустить его.
идея
- мы запускаем 3-е задание только для тегов, которые много регулярно выражение.
- в приведенном ниже примере он запущен для тегов, таких как
helloTag.1
,helloTag.2
,helloTag.3
... так далее. -
если мы в
develop
илиmaster
(или другая ветвь), мы будем иметь 3 этапа (Этап 1, Этап 2, Этап 4)обратите внимание, как 3-е задание отсутствует в конвейере
-
перейдите в раздел "репозиторий" -- > "Теги" -- > " создать tag"
дайте тегу имя, которое очень ваше регулярное выражение
-
если мы находимся в теге с именем, которое начинается с " helloTag.", у нас будет 1 этап (Этап 3)
обратите внимание, как другие этапы здесь нет
пример .gitlab-ci
файл
stages:
- myStage1
- myStage2
- myStage3
- myStage4
This is my first stage:
stage: myStage1
before_script:
- echo "my stage 1 before script"
script:
- echo "my stage 1 script"
except:
- /^helloTag.*$/
This is my second stage:
stage: myStage2
before_script:
- echo "my stage 2 before script"
script:
- echo "my stage 2 script"
except:
- /^helloTag.*$/
This is my third stage:
stage: myStage3
before_script:
- echo "my stage 3 before script"
script:
- echo "my stage 3 script"
only:
- /^helloTag.*$/
This is my fourth stage:
stage: myStage4
before_script:
- echo "my stage 4 before script"
script:
- echo "my stage 4 script"
except:
- /^helloTag.*$/
надеюсь, что это помогает вам.
> В настоящее время кажется невозможным с GitLab CI иметь другие программные коммутаторы, чем tags
или branches
как указано в другие ответы.
мы, наконец, переключились на другой "реальный" CI из-за слишком многих ограничений на GitLab CI. GitLab CI unfelixble, если вы хотите запустить некоторые пользовательские задания в разных процедурах. Я действительно оценил оба ответа здесь. Я уверен, что они помогут другим пользователям управлять этой штукой. К сожалению, в нашем случае мы не могли использовать tags
, commit messages
или branches
как программный коммутатор.
мы все еще ищем ответ на этот вопрос. Не стесняйтесь давать другой подход к решению этой проблемы. Я отмечу правильный ответ, как только он попадет. Также щедрость на этот вопрос не привела к правильному ответу.