Как запустить работу gitlab-ci.yml только на отмеченной ветке?

Как выполнить задание .gitlab-ci.yml только на отмеченной ветке мастера?

job:
  script:
  - echo "Do something"
  only:
  - master
  - tags

Вышеприведенный код будет работать, если любое условие существует: главная ветвь или помеченная фиксация.

Моя цель - запустить этот запуск для развертывания производства, но для этого потребуется, чтобы он находился на ветке мастера и был помечен тегом (с версией). В противном случае у меня будет другая работа, которая будет продвигаться вперед, если отсутствует тег.

Ответ 1

Это поведение пока не поддерживается gitlab-ci, хотя есть открытая проблема, чтобы добавить его.

Тем временем я также слышал анекдотические сообщения о том, что

only:
  - master
only:
  - tags

выполнит задание (а также анонимные отчеты, которые он не будет).

Ответ 2

Я заставил это работать, и это мой рабочий фрагмент кода, все остальные не работали на меня

only:
 - tags  # please mention the 's' compared to Sergio Tomasello solution
except:
 - branches

Я использую 11.4.3

Ответ 3

Это поведение будет введено в версии 12.

Открытая проблема была недавно обновлена:

Джейсон Ленни @jlenny изменил название с {-Update.gitlab-ci.yml для поддержки логики коннектов для сборки conditions-} на логику конъюнкций для условий сборки MVC · 2 дня назад

Джейсон Ленни @jlenny изменил веху на 12.0 · 2 дня назад

(скрещенные пальцы)

Решение состоит в том, чтобы использовать ключевое слово except чтобы исключить все ветки, вместе с тем, чтобы запускать only теги, таким образом, вы запускаете свой конвейер только для тега в главной ветки:

  only:
    - tags
  except:
    - branches

Я использую версию 11.3.4

Ответ 4

Спасибо другим, таким как Мэтт Алиото, который написал об открытом выпуске (который обозначен как Product Vision 2019 так что, надеюсь, в этом году он его выбьет).

В отношении вопроса Карлсона Коула это будет работать:

job_for_master_no_tags:
  stage: deploy
  script:
  - echo "Release to Staging"
  only:
  - master

job_for_master_tags_only:
  stage: deploy
  script:
  - echo "Release to Production"
  only:
  - tags
  except:
  - /^(?!master)[email protected]/    # Ruby RegEx for anything not starting with 'master'
  • Чтобы увидеть, как работает этот RegEx, проверьте https://rubular.com/r/1en2eblDzRP5Ha
  • Я проверил это на GitLab версии 11.7.0, и это работает
    • Примечание: если вы попытаетесь использовать -/^(?!master).+/ (без @), это не сработает, узнал, что трудный путь 😕