GitLab CI - избегать сборки при добавлении тега - PullRequest
4 голосов
/ 22 февраля 2020

Как предотвратить запуск конвейера gitlab ci при добавлении тега git? Я запускаю эту команду локально (в отличие от задания gitlab-ci)

git tag -a "xyz"

и затем нажимаю метку; и это вызывает различные конвейеры. Я хочу исключить запуск некоторых из этих конвейеров.

Я пробую варианты идей из таких вопросов, как this ; этот вопрос использует только , я хочу исключить, поэтому я пытаюсь, кроме. Ответы там имеют два варианта, один с refs один без.

build:  
  # ... my work here ...  
  except:
    - tags


build:  
  # ... my work here ...  
  except:
    refs:
      - tags

Ни один из них, кажется, не имеет никакого эффекта; Я добавляю тег, сборка по-прежнему происходит.

Мое понимание может быть здесь совершенно неверным, поскольку кажется, что существует три возможных значения слова tags , и когда я читаю документы или примеры, я не всегда уверен, какое значение применимо:

  1. Git теги, примененные с использованием git тега
  2. теги Gitlab CI, используемые для определения, какие бегуны выбирают работу
  3. Идентификатор ref фиксации, используемый для запуска конвейера через REST API. Обычно это имя ветви, но это может быть тег git.

Мне интересно контролировать, что произойдет, если в первом случае. Пока из комментариев ясно, что «кроме: -tags» не имеет отношения к моему случаю, так есть ли подход, который работает?

Ответы [ 2 ]

11 голосов
/ 04 марта 2020

Except tags - это именно то, что вы должны использовать, если хотите пропустить сборку для тегов.

Вы должны обязательно понимать коммит против веток против тегов

Чтобы проиллюстрировать, что происходит, когда вы добавляете в тег gitlab тег с тегом sh, я сделал следующее:

  1. Создан .gitlab-ci.yml со следующим содержимым:
tests_always_run:
    script:
      - echo I should always execute
tests_except_tags:
    script:
      - echo I skip tagged triggers
    except:
      - tags
Переданные изменения, тег с фиксацией и нажатие --follow-tags, чтобы убедиться, что тег также распространяется на сервер:
git add .gitlab-ci.yml
git commit -m 'my great yml with except tags'
git tag -a "abc" -m "Test tag"
git push --follow-tags

Иллюстрированные результаты: Tagged commit pipeline results

Если вы хотите пропустить CI для выбранного коммита, вы можете использовать git pu sh -o ci.skip , вдохновленный этой статьей

2 голосов
/ 04 марта 2020

(примечание: это отформатированный комментарий, а не ответ)

Для отладки условий, запускающих ваш конвейер:

do gitlab c упоминает несколько переменных, которые задаются при запуске задания CI, среди которых:

  • CI_COMMIT_REF_NAME: имя ветви или тега, для которого создается проект
  • CI_COMMIT_BRANCH: Имя ветви коммита. Присутствует только при построении ветвей.
  • CI_COMMIT_TAG: Имя тега фиксации. Присутствует только при построении тегов.

Пусть ваше задание на сборку выведет некоторые из этих переменных (например, echo "triggered by ref : " $CI_COMMIT_REF_NAME), чтобы увидеть, что вызвало вашу работу.

...