Маркерът GitLab Pipeline спря да задейства етап, маркиран само: тагове

Имаме тръбопровод на GitLab, който се задейства от друг тръбопровод. Този конвейер има два етапа, всеки от които се изпълнява в отделен екземпляр на конвейера. И двата етапа функционират правилно.

Първият етап реагира на спусъка. Той намира етикет за версия в репото, увеличава го с единица и прилага този етикет обратно към текущия проект.

Вторият етап се изпълнява в отговор на нов етикет, в нов екземпляр на конвейера. Този етап също функционира перфектно, когато работи.

Проблемът е, че вторият етап вече не работи, след като първият етап работи успешно. До преди две седмици работеше добре. Ключови части от тръбопровода са възпроизведени по-долу.

ОБОБЩЕНИЕ НА ПРОБЛЕМА

  • Ако използвате тригера, който задейства етапа 'createtag', етапът 'createtag' се изпълнява, създава етикета, избутва го в репото и след това етапът на 'разгръщане' с only:tags НЕ СЕ ИЗПЪЛНЯВА. Но беше така, до преди две седмици.

ТРЪБОПРОВОДЪТ ВСЕ ОЩЕ РЕАГИРА НА ДРУГИ МЕТОДИ ЗА ЗАДАВАНЕ НА ЕТИКЕТИ

  • Ако създадете таг от командния ред на GIT и го изпратите в репото, етапът „разгръщане“ с only:tags работи.
  • Ако създадете етикет от главната страница на проекта GitLab чрез Създаване на нов | Нова опция за падащо меню за етикети, етапът „разгръщане“ с only:tags работи.

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

Етапът '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-токен:

 $ 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-ри екземпляр на тръбопровода да работи. Обмислям да премахна втория етап и след това да го създам отново, за да видя дали това по някакъв начин ще го задейства отново. Със сигурност все още отворен за други идеи. - person JMac; 22.04.2020
comment
Интересен проблем! Какво ще стане, ако стартирате моя тестов конвейер (след актуализиране на токена и Git URL, за да насочите вашия тестов проект)? Бих очаквал, че ще работи (1-ви етап трябва да доведе до стартиране на 2-ри етап, 2-ри екземпляр на тръбопровода). Вие сте в самостоятелно хостван GitLab? - person Aleksey Tsalolikhin; 22.04.2020