Тег GitLab Pipeline перестал запускать только этап с пометкой: теги

У нас есть конвейер GitLab, который запускается из другого конвейера. Этот конвейер состоит из двух этапов, каждая из которых работает в отдельном экземпляре конвейера. Оба эти этапа работают правильно.

Первая ступень реагирует на триггер. Он находит тег версии в репо, увеличивает его на единицу и применяет этот тег обратно к текущему проекту.

Второй этап запускается в ответ на новый тег в новом экземпляре конвейера. Этот этап также отлично работает при запуске.

Проблема в том, что второй этап больше не запускается после успешного выполнения первого. Еще две недели назад он работал нормально. Ключевые части трубопровода воспроизводятся ниже.

РЕЗЮМЕ ПРОБЛЕМЫ

  • Если вы используете триггер, который запускает этап createtag, запускается этап createtag, создается тег, отправляется его в репозиторий, а затем этап развертывания только с: tags НЕ ЗАПУСКАЕТСЯ. Но так было еще две недели назад.

ТРУБОПРОВОД ЕЩЕ ОТВЕТИТ НА ДРУГИЕ СПОСОБЫ УСТАНОВКИ ТЭГОВ

  • Если вы создаете тег из командной строки GIT и отправляете его в репозиторий, будет работать этап «развертывание» только с тегами:.
  • Если вы создаете тег на главной странице проекта GitLab через Create New | Новая опция раскрывающегося списка тегов, этап «развертывание» только с тегами: работает.

ОДНА ДРУГАЯ КЛЮЧЕВАЯ ИНФОРМАЦИЯ

Этап createtag также перестал работать две недели назад. Оказалось, что токен, привязанный к триггеру, недействителен, а владелец токена больше не работает в компании, и GitLab показывает «Заблокировано» рядом с пользователем на вкладке «Участники».

Принятие права собственности на триггер / токен с текущим пользователем повторно включил токен. После этого снова запустился этап createtag. Проблема в том, что этап «развертывание» по-прежнему не запускается, когда этап «createtag» помещает новый тег в репо.

Есть идеи о том, что произошло и как заставить стадию «развертывания» снова начать реагировать на действия стадии «createtag»? Я почти уверен, что это связано с разрешениями для ушедшего пользователя.

variables:
    CI_DEBUG_TRACE: "true"

stages:
  - createtag
  - deploy

# When receiving a trigger to build, tag the repository with the next numeric
# build version. This should kick off the next build pipeline for deployment.
increment_version:
  stage: createtag
  script:
    # For brevity, logic to connect to repo, get tags, set $NEW_TAG are omitted. They work just fine

    # Create new tag and push to repo
    - git tag $NEW_TAG master
    - git push --tags

  only:
    - triggers

# When a tagged build is received, execute script
deploy_to_somewhere:
  stage: deploy
  script:
    - [Do Something Here]
  only:
    - tags

person JMac    schedule 21.04.2020    source источник


Ответы (1)


Я поэкспериментировал со следующим .gitlab-ci.yml, чтобы увидеть, могу ли я получить задание пометить сборку, которая затем вызовет другой экземпляр того же конвейера; и следующее делает это (с удаленным токеном личного доступа).

Мне пришлось добавить токен триггера и токен личного доступа, чтобы этот тест заработал.

Это сработало, как и ожидалось - я нажимал на конвейер с помощью curl, чтобы запустить его, а затем он создавал тег, и это запускало другой конвейер, который запускал развертывание.

Вот полный рабочий .gitlab-ci.yml:

createtag:
  script:
    - git config --global user.email "[email protected]"
    - git config --global user.name "My Name"
    - git tag -m 'tag message' $(date +%s) origin/master
    - git remote add mygitlab https://oauth2:[email protected]/atsaloli/trigger-test.git
    - git push --tags mygitlab
  only:
    - triggers

deploy_to_somewhere:
  script:
    - echo run deploy script
  only:
    - tags

и снимок экрана, показывающий два экземпляра конвейера:

введите здесь описание изображения

Итак, то, что вы описали, определенно может сработать - я бы немного присмотрелся к вашей системе, чтобы увидеть, работает ли каждая часть должным образом - например, git команды, которые вы дали, я не понимаю, как они будут работать .. .

Где у вас есть:

  # Create new tag and push to repo
    - git tag $NEW_TAG master
    - git push --tags

Я обнаружил, что это не сработало для меня.

Во-первых, «master» не был известной ссылкой на git:

 $ git tag $(date +%s) master
 fatal: Failed to resolve 'master' as a valid ref.

Затем "origin / master" работал, но мне пришлось установить свою личность:

 $ git tag -m 'tag message' $(date +%s) origin/master
 *** Please tell me who you are.
 Run
   git config --global user.email "[email protected]"
   git config --global user.name "Your Name"
 to set your account's default identity.
 Omit --global to set the identity only in this repository.
 fatal: unable to auto-detect email address (got 'root@runner-72989761-project-3569621-concurrent-0.(none)')

Наконец, мне пришлось предоставить gitlab-ci-token:

 $ git config --global user.email "[email protected]"
 $ git config --global user.name "My Name"
 $ git tag -m 'tag message' $(date +%s) origin/master
 $ git push --tags
 remote: You are not allowed to upload code.
 fatal: unable to access 'https://gitlab-ci-token:[MASKED]@gitlab.com/atsaloli/test.git/': The requested URL returned error: 403

Итак, как только я справился со всем этим, я обнаружил, что могу автоматически пометить репо, что приведет к запуску другого экземпляра конвейера.

person Aleksey Tsalolikhin    schedule 21.04.2020
comment
Алексей, спасибо за создание тестового конвейера и проверку его общей функциональности: триггер запускает этап 1, а работа этапа 1 заставляет другой экземпляр конвейера запустить этап 2. Я убедился, что каждая часть моего конвейера работает должным образом, и обновил исходный пост, чтобы прояснить это. Проблема в том, что на первом этапе больше не запускается 2-й этап, 2-й экземпляр конвейера. Я подумываю удалить вторую стадию, а затем воссоздать ее, чтобы посмотреть, вернет ли это как-то все снова. Конечно, все еще открыт для других идей. - person JMac; 22.04.2020
comment
Интересная проблема! Что, если бы вы запустили мой тестовый конвейер (после обновления токена и URL-адреса Git, чтобы настроить таргетинг на свой тестовый проект)? Я ожидал, что это сработает (1-й этап должен вызвать запуск 2-го этапа, 2-го экземпляра конвейера). Вы работаете в автономном GitLab? - person Aleksey Tsalolikhin; 22.04.2020