Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

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

НСка създадСм минималния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» сами - Ρ‰Π΅ Π·Π°Π±Ρ€Π°Π½ΠΈΠΌ Merge, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ няколко Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π΅ поставят Β«ΠΏΠ°Π»Π΅Ρ† Π½Π°Π³ΠΎΡ€Π΅Β» Π½Π° MR.

Π—Π°Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ?

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

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π½ΠΈ сС Π½Π°Π»Π°Π³Π°:

  • ΠΈΠ»ΠΈ напълно Π΄Π° Π·Π°Π±Ρ€Π°Π½ΠΈΠΌ Merge Π² Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈΡ‚Π΅ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π·Π° част ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, Π½ΠΎ Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° Merge, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΏΡ€ΠΈ сливанС Π½Π° Ρ‡ΡƒΠΆΠ΄ΠΈ MR ΠΊΠ°Ρ‚ΠΎ бонус;
  • ΠΈΠ»ΠΈ Π΄Π° прСдоставим Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ слиwania с Π²Π°ΡˆΠ°Ρ‚Π° основна ΠΊΠ»ΠΎΠ½ Π±Π΅Π· code review, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Ρ‚ΠΎΠ²Π° Π΅ Junior, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Π».

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

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

ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ настроим одобрСния Π·Π° Merge request Π½Π° тСстово Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ myapp:

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

1. БъздавамС Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ API

Π’Π»ΠΈΠ·Π°ΠΌΠ΅ Π² Настройки Π½Π° потрСбитСля β†’ Π’ΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΈ записвамС Ρ‚ΠΎΠΊΠ΅Π½Π°:

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

ΠŸΡ€ΠΎΡ„ΠΈΠ» Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½
Π”ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ API позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ практичСски всичко с Π²Π°ΡˆΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π·Π° GitLab, Π΄Π° ΠΌΡƒ прСдоставитС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡ€Π°Π²Π° Π²ΡŠΡ€Ρ…Ρƒ Π²Π°ΡˆΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Reporter) ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ».

2. ДобавямС Ρ‚ΠΎΠΊΠ΅Π½Π° Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° GitLab

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

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

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

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

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

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

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

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

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;

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

Π΅Ρ‚Π°ΠΏΠΈ:
- тСст

variables:
NEED_VOTES: 1

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

ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° NEED_VOTES опрСдСля ΠΊΠΎΠ»ΠΊΠΎ "ΠΏΠ°Π»Ρ†ΠΈ Π½Π°Π³ΠΎΡ€Π΅" трябва Π΄Π° ΠΈΠΌΠ° MR, Π·Π° Π΄Π° бъдС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Merge. Бтойността, Ρ€Π°Π²Π½Π° Π½Π° Π΅Π΄ΠΈΠ½, ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ самият Π²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ своя MR, ΠΊΠ°Ρ‚ΠΎ ΠΌΡƒ Π΄Π°Π΄Π΅Ρ‚Π΅ "Π»Π°ΠΉΠΊ".

include Π²ΠΊΠ»ΡƒΡ‡Π²Π° Π΅Ρ‚Π°ΠΏΠ° test, ΠΊΠΎΠΉΡ‚ΠΎ провСрява броя "Π»Π°ΠΉΠΊΠΎΠ²Π΅".

Най-простият ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° myapp.gitlab-ci.yml
Π΅Ρ‚Π°ΠΏΠΈ:
- ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅
- тСст

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
скрипт:
- echo CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- java HelloWorld.java

Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ check-approve.gitlab-ci.yml
ci-mr:
Π΅Ρ‚Π°ΠΏ: тСст
скрипт:
- 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})" ];
Ρ‚ΠΎΠ³Π°Π²Π°
echo "MR OK";
ΠΈΠ½Π°Ρ‡Π΅
echo "MR ERROR Need more votes";
exit 1;
fi
image: laptevss\/gitlab-api-util
ΠΏΡ€Π°Π²ΠΈΠ»Π°:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ \/^release\/.*$\/'

ΠŸΠΎΠ²Π΅Ρ‡Π΅ информация Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС случва ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

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

5. ЗабранявамС ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ Π² Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠΌΠ΅ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅Ρ‚Π΅, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ code review ΠΈ посочвамС, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с тях Π΅ възмоТна само Ρ‡Ρ€Π΅Π· MR.

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

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

6. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅

Π—Π°Π΄Π°Π²Π°ΠΌΠ΅ NEED_VOTES: 0

ΠŸΡ€Π°Π²ΠΈΠΌ MR ΠΈ поставямС Β«Π΄ΠΈΠ·Π»Π°ΠΉΠΊΒ».

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

Π’ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° сборката:

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

Π‘Π΅Π³Π° поставямС Β«Π»Π°ΠΉΠΊΒ» ΠΈ стартирамС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

Code review Π² Gitlab CE: Π°ΠΊΠΎ няматС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π·Π° Merge request, Π½ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ голямо ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster