Как запустить конкретную работу в 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-е задание отсутствует в конвейере

    enter image description here

  • перейдите в раздел "репозиторий" -- > "Теги" -- > " создать tag"

    дайте тегу имя, которое очень ваше регулярное выражение

    enter image description here

  • если мы находимся в теге с именем, которое начинается с " helloTag.", у нас будет 1 этап (Этап 3)

    обратите внимание, как другие этапы здесь нет

    enter image description here

пример .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 как программный коммутатор.

мы все еще ищем ответ на этот вопрос. Не стесняйтесь давать другой подход к решению этой проблемы. Я отмечу правильный ответ, как только он попадет. Также щедрость на этот вопрос не привела к правильному ответу.