ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

Π•Π΄Π½Π° ΠΎΡ‚ Π½Π°ΠΉ-Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, която Π½Π΅ Π΅ Π² Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½Π°Ρ‚Π° вСрсия Π½Π° GitLab, Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° гласуватС срСщу Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π·Π° Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ заявката Π·Π° сливанС (MR), ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈΡ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°.

Π‘Π°ΠΌΠΈ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° функционалност - Ρ‰Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ Merge, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ няколко Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π΅ Π΄Π°Π΄Π°Ρ‚ β€žΠΏΠ°Π»Π΅Ρ† Π½Π°Π³ΠΎΡ€Π΅β€œ Π½Π° MR.

Π—Π°Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΅ Ρ‚ΠΎΠ²Π°?

ΠΠ°ΡˆΠ°Ρ‚Π° организация ΠΌΠΎΠΆΠ΅ Π΄Π° си ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π·Π°ΠΊΡƒΠΏΠΈ Π»ΠΈΡ†Π΅Π½Π· Π·Π° GitLab. Но Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π² Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ Ρ†ΠΈΠΊΡŠΠ» Π±Π΅Π· Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ ΠΈΠΌΠ° стриктно Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½Π΅, Π·Π°ΠΊΡƒΠΏΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° самоуправляСми Π»ΠΈΡ†Π΅Π½Π·ΠΈ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° функционалност ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚Π½Π΅ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ мСсСци ΠΈ трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ сСга.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° трябва:

  • ΠΈΠ»ΠΈ напълно Π·Π°Π±Ρ€Π°Π½Π΅Ρ‚Π΅ сливанСто Π² Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π·Π° някои Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, Π½ΠΎ Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° сливанС, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΏΡ€ΠΈ сливанС Π½Π° MR Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ…ΠΎΡ€Π° ΠΊΠ°Ρ‚ΠΎ бонус;
  • ΠΈΠ»ΠΈ Π²ΠΈ позволяват Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ сливания с вашия Π³Π»Π°Π²Π΅Π½ ΠΊΠ»ΠΎΠ½ Π±Π΅Π· ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Ρ‚ΠΎΠ²Π° Π΅ Junior, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ сС Π΅ установил Π²Ρ‡Π΅Ρ€Π°.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…, бСшС Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΡ Π² Google, вярвайки, Ρ‡Π΅ някой Π²Π΅Ρ‡Π΅ Π΅ ΠΏΡ€Π°Π²ΠΈΠ» Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ (Π±Π΅Π· Π΄Π° ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΡ€Π° ΠΊΠΎΠ΄Π°), Π½ΠΎ сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ всС ΠΎΡ‰Π΅ няма Ρ‚Π°ΠΊΠ°Π²Π° рСализация във вСрсията Π½Π° общността.

ΠžΠ±Ρ‰Π° схСма Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°

ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠ° настроим одобрСния Π½Π° заявки Π·Π° сливанС Π² тСстово Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

  1. Π”Π° създадСм Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ GitLab API (Ρ‡Ρ€Π΅Π· Π½Π΅Π³ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ информация Π·Π° броя Π½Π° гласовСтС Π·Π° ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²)
  2. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ към ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° GitLab
  3. Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ сливанСто, Π°ΠΊΠΎ ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² процСса (Π°ΠΊΠΎ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ гласовС β€žΠ·Π°β€œ)
  4. НастройтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° гласа ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ CI/CD Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°
  5. Π©Π΅ Π·Π°Π±Ρ€Π°Π½ΠΈΠΌ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ към Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠΌ всички ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ само Ρ‡Ρ€Π΅Π· MR
  6. НСка Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ случило Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка

1. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ API

ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠΈ настройки β†’ Π’ΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΈ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½Π°:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

Акаунт Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π°
API Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всичко с Π²Π°ΡˆΠΈΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π² Gitlab, Π΄Π° ΠΌΡƒ Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡ€Π°Π²Π° Π·Π° Π²Π°ΡˆΠΈΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° (ΠΊΠ°Ρ‚ΠΎ Reporter) ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Ρ‚ΠΎΠ·ΠΈ Π°ΠΊΠ°ΡƒΠ½Ρ‚.

2. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½Π° към ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° Gitlab

НапримСр Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ QmN2Y0NOUFlfeXhvd21ZS01aQzgK

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Настройки β†’ CI/CD β†’ ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ β†’ ДобавянС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° β†’ GITLAB_TOKEN_FOR_CI

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π² Π΅Π΄Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π² Π³Ρ€ΡƒΠΏΠ° ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

3. ΠŸΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ Π·Π°Π±Ρ€Π°Π½Π° Π½Π° Merge, Π°ΠΊΠΎ Π½Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ»Π΅Π³ΠΈΡ‚Π΅ слСд ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° Π½Π° ΠΊΠΎΠ΄Π°

Π’ нашия случай Π·Π°Π±Ρ€Π°Π½Π°Ρ‚Π° Π·Π° сливанС Ρ‰Π΅ бъдС, Ρ‡Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΡŠΡ‚ Π·Π° сглобяванС Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°, Π°ΠΊΠΎ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ гласовС.

ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² Настройки β†’ ΠžΠ±Ρ‰ΠΈ β†’ Заявки Π·Π° сливанС β†’ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° сливанС ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ опцията Π‘Π³Π»ΠΎΠ±ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ Π»ΠΈΠ½ΠΈΠΈ трябва Π΄Π° работят ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

4. НастройтС Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°

Ако всС ΠΎΡ‰Π΅ Π½Π΅ стС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ .gitlab-ci.yml с просто ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅:

stages:
  - build
  - test

variables:
  NEED_VOTES: 1

include:
  - remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

run-myapp:
  stage: build
  script: echo "Hello world"

ΠžΡ‚Π΄Π΅Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° CI/CD конфигурация
Π‘ΠΈΡ… ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π» Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» myapp.gitlab-ci.yml, Π·Π° Π΄Π° настроитС Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π½Π° участницитС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° промСнят ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ.

ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° новия Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π΅Π½ Ρ„Π°ΠΉΠ» Ρ‰Π΅ трябва Π΄Π° бъдС посочСно, ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° myapp - Настройки - CI / CD - БглобяСми Π»ΠΈΠ½ΠΈΠΈ - ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ CI ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΏΡŠΡ‚ - посочСтС Π½ΠΎΠ² Ρ„Π°ΠΉΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Π‘ΡŠΠ²Π΅Ρ‚: Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€, Π·Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² GitLab CI Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅
Π”ΠΎΡ€ΠΈ ΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ сами, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Ρ‡Ρ€Π΅Π· MR Ρ‰Π΅ Π²ΠΈ бъдС Π΄ΠΎΠ±ΡŠΡ€ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ, изпълнявайки всичкитС си ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡ€Π΅Π· Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°. Ако Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° Π² синтаксиса Π½Π° YAML Ρ„Π°ΠΉΠ»Π°, Ρ‚ΠΎΠ²Π° няма Π΄Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π΅Ρ‚Π΅ работния ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, Π° просто Ρ‰Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π° Merge.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ с Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ във вашия ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€:

hub.docker.com/r/gableroux/gitlab-ci-lint
hub.docker.com/r/sebiwi/gitlab-ci-validate

И ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅:

stages:
  - lint

lint:
  stage: lint
  image: sebiwi/gitlab-ci-validate:1.3.0
  variables:
    GITLAB_HOST: https://gitlab.com
  script:
    - CI_FILES=(./*.yml)
    - for f in "${CI_FILES[@]}"; do
        gitlab-ci-validate $f;
      done;

ΠžΡΡ‚Π°Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ няколко ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° към вашия ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ:

stages:
- test

variables:
NEED_VOTES: 1

include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° NEED_VOTES опрСдСля ΠΊΠΎΠ»ΠΊΠΎ "ΠΏΠ°Π»Π΅Ρ†Π° Π½Π°Π³ΠΎΡ€Π΅" MR трябва Π΄Π° ΠΈΠΌΠ°, Π·Π° Π΄Π° Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ сливанСто. Бтойност Π΅Π΄Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π²ΠΈΠ΅ ​​сами ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ вашия MR, ΠΊΠ°Ρ‚ΠΎ Π³ΠΎ β€žΡ…Π°Ρ€Π΅ΡΠ°Ρ‚Π΅β€œ.

include Π²ΠΊΠ»ΡŽΡ‡Π²Π° тСстовия Π΅Ρ‚Π°ΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ провСрява броя Π½Π° "харСсванията".

Най-простият ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ myapp.gitlab-ci.yml ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€
stages:
- build
- test

variables:
NEED_VOTES: 0

include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

run-myapp:
stage: build
image: openjdk
script:
- echo CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- java HelloWorld.java

Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π½Π° check-approve.gitlab-ci.yml
ci-mr:
stage: test
script:
- echo ${CI_API_V4_URL}
- echo "CI_PROJECT_ID ${CI_PROJECT_ID}"
- echo "CI_COMMIT_SHA ${CI_COMMIT_SHA}"
- "export MR_ID=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .id else {} end" | grep --invert-match {})"
- "export MR_TITLE=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .title else {} end" | grep --invert-match {})"
- "export MR_WIP=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .work_in_progress else {} end" | grep --invert-match {})"
- "export MR_UPVOTES=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .upvotes else {} end" | grep --invert-match {})"
- "export MR_DOWNVOTES=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .downvotes else {} end" | grep --invert-match {})"
- MR_VOTES=$(expr ${MR_UPVOTES} - ${MR_DOWNVOTES})
- NEED_VOTES_REAL=${NEED_VOTES:-1}
- echo "MR_ID ${MR_ID} MR_TITLE ${MR_TITLE} MR_WIP ${MR_WIP} MR_UPVOTES ${MR_UPVOTES} MR_DOWNVOTES ${MR_DOWNVOTES}"
- echo "MR_VOTES ${MR_VOTES} Up vote = 1, down vote = -1, MR OK if votes >=${NEED_VOTES_REAL}"
- if [ "${MR_VOTES}" -ge "$(expr ${NEED_VOTES_REAL})" ];
then
echo "MR OK";
else
echo "MR ERROR Need more votes";
exit 1;
fi
image: laptevss/gitlab-api-util
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^release/.*$/'

НаучСтС ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ сС случва ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

  • Π·Π°Π΄Π°Π΄Π΅Π½ΠΎ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Ρ‰Π΅ бъдС само ΠΏΡ€ΠΈ създаванС Π½Π° MR Π² master ΠΈΠ»ΠΈ release /* ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅
  • ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ GitLab API, Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ броя Π½Π° β€žΡ…Π°Ρ€Π΅ΡΠ²Π°Π½ΠΈΡΡ‚Π°β€œ ΠΈ β€žΠ½Π΅Ρ…Π°Ρ€Π΅ΡΠ²Π°Π½ΠΈΡΡ‚Π°β€œ
  • изчислСтС Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½ΠΈΡ‚Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ
  • Π°ΠΊΠΎ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° ΠΎΡ‚ стойността, която смС Π·Π°Π΄Π°Π»ΠΈ Π² NEED_VOTES, Ρ‚ΠΎΠ³Π°Π²Π° Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° сливанС

5. Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ към Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅

НиС опрСдСлямС ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅Ρ‚Π΅, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°, ΠΈ посочвамС, Ρ‡Π΅ с тях ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ само Ρ‡Ρ€Π΅Π· MR.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Настройки β†’ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ β†’ Π—Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

6. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

Π—Π°Π΄Π°ΠΉΡ‚Π΅ NEED_VOTES: 0

ΠŸΡ€Π°Π²ΠΈΠΌ MR ΠΈ поставямС "dislike".

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

Π’ рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

Π‘Π΅Π³Π° поставСтС β€žΡ…Π°Ρ€Π΅ΡΠ²Π°ΠΌβ€œ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π° Π² Gitlab CE: Π°ΠΊΠΎ няма одобрСния Π·Π° исканС Π·Π° сливанС, Π½ΠΎ наистина искам

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€