БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

Π”ΠΎΠ±ΡŠΡ€ Π²Π΅Ρ‡Π΅Ρ€, Π₯Π°Π±Ρ€!

ДнСс Π±ΠΈΡ… искал Π΄Π° сподСля Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½ΠΈΡ‚Π΅, ΠΏΠΎ ΠΊΠΎΠΈΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Active Choices Plugin ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° изпълним Π·Π°Π΄Π°Ρ‡Π° Π² Jenkins Π½Π°ΠΉ-ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π°Ρ‡ΠΈΠ½.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π°ΠΊΠ°Π²Π° Π°Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΊΠ°Ρ‚ΠΎ DevOps ΠΎΡ‚Π΄Π°Π²Π½Π° Π½Π΅ Π΅ Π½Π΅Ρ‰ΠΎ Π½ΠΎΠ²ΠΎ Π·Π° ИВ общността. Π—Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€Π° Ρ„Ρ€Π°Π·Π°Ρ‚Π° Β«ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° DevOpsΒ» Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½Π° с някакъв магичСски Π±ΡƒΡ‚ΠΎΠ½, ΠΏΡ€ΠΈ натисканСто Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° Π² Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈ тСствано ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (всичко наистина Π΅ ΠΏΠΎ-слоТно, Π½ΠΎ абстрахирамС ΠΎΡ‚ всички процСси).

И Ρ‚Π°ΠΊΠ°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ° Π΄Π° създадСм Ρ‚Π°ΠΊΡŠΠ² магичСски Π±ΡƒΡ‚ΠΎΠ½, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ администраторитС Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с Π΅Π΄Π½ΠΎ Ρ‰Ρ€Π°ΠΊΠ²Π°Π½Π΅. Има Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π°: ΠΎΡ‚ написванСто Π½Π° Π±ΠΎΡ‚ Π·Π° някой ΠΎΡ‚ ΠΌΠ΅ΡΡΠ΅Π½Π΄ΠΆΡŠΡ€ΠΈΡ‚Π΅ Π΄ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° Ρ†Π΅Π»Ρ‚Π° Π½Π° всичко Ρ‚ΠΎΠ²Π° Π΅ Π΅Π΄Π½Π° – Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ стартиранСто Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΈ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π°ΠΉ-ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π’ нашия случай Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Jenkins.


БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

Π—Π°Π΄Π°Ρ‡Π°

БъздаванС Π½Π° ΡƒΠ΄ΠΎΠ±Π½Π° Jenkins Ρ€Π°Π±ΠΎΡ‚Π°, която Ρ‰Π΅ стартира ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΈ (ΠΈΠ»ΠΈ) Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° избрания микросСрвис с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° вСрсия.

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

Π’Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ

Π Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ с няколко рСпозитория, Π² ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° изходният ΠΊΠΎΠ΄ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ микросСрвиси.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅

Π’ Π½Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° трябва Π΄Π° ΠΏΠΎΡΡ‚ΡŠΠΏΠ²Π°Ρ‚ слСднитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

  1. URL Π½Π° рСпозитория с ΠΊΠΎΠ΄Π° Π½Π° микросСрвиса, ΠΊΠΎΠΉΡ‚ΠΎ искамС Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ ΠΈ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΏΡ€ΠΈ стартиранС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.
  2. ID Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π°, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ.

AS IS

Най-простият Π½Π°Ρ‡ΠΈΠ½ Π·Π° изпълнСниС Π½Π° поставСната Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° създадСм Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° с Ρ‚ΠΈΠΏ String.

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

Π’ Ρ‚ΠΎΠ·ΠΈ случай потрСбитСлят Ρ‰Π΅ трябва Ρ€ΡŠΡ‡Π½ΠΎ Π΄Π° въвСдС ΠΏΡŠΡ‚Ρ Π΄ΠΎ рСпозитория ΠΈ id Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ, ΠΏΡ€ΠΈΠ·Π½Π°ΠΉΡ‚Π΅, Π½Π΅ Π΅ особСно ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

AS TO BE

А сСга Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π·Π° Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ всички Π½Π΅Π³ΠΎΠ²ΠΈ прСдимства.
НСка създадСм ΠΏΡŠΡ€Π²ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ с Ρ‚ΠΈΠΏ Choice Parameter, Π²Ρ‚ΠΎΡ€ΠΈ β€” Active Choices Reactive Reference Parameter. Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° с Ρ‚ΠΈΠΏ Choice добавямС Ρ€ΡŠΡ‡Π½ΠΎ Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Choices ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ‚Π΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ микросСрвиси.

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

Ако Ρ‚Π°Π·ΠΈ статия харСса Π½Π° аудиторията, Π² слСдващата статия Ρ‰Π΅ опиша процСса Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π² Jenkins, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ описаниС ΠΏΡ€Π΅Π· ΠΊΠΎΠ΄ (Configuration as code), Ρ‚.Π΅. няма Π΄Π° трябва Ρ€ΡŠΡ‡Π½ΠΎ Π΄Π° въвСТдамС ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ ΠΈ Π΄Π° създавамС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, всичко Ρ‰Π΅ сС случи Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ (Π½Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ΄ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ списък Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ ΠΎΡ‚ SCM ΠΈ Ρ‰Π΅ създадС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ с Ρ‚ΠΎΠ·ΠΈ списък).

БтойноститС Π½Π° втория ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Ρ‰Π΅ сС Π·Π°ΠΏΡŠΠ»Π²Π°Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ, Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²Π° стойност Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ (test1 ΠΈΠ»ΠΈ test2), Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ всСки Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠΌΠ° свой собствСн списък с ΠΊΠΎΠΌΠΈΡ‚ΠΈ.

Active Choices Reactive Reference Parameter ΠΈΠΌΠ° слСднитС ΠΏΠΎΠ»Π΅Ρ‚Π° Π·Π° попълванС:

  1. Name – ΠΈΠΌΠ΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°.
  2. Script – ΠΊΠΎΠ΄ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС изпълнява всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стойността Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° ΠΎΡ‚ ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Referenced parameter бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π° (Π² нашия случай, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ test1 ΠΈ test2).
  3. ОписаниС – ΠΊΡ€Π°Ρ‚ΠΊΠΎ описаниС Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°.
  4. Choice Type – Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, Π²ΡŠΡ€Π½Π°Ρ‚ ΠΎΡ‚ скрипта (Π² нашия случай Ρ‰Π΅ Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ html ΠΊΠΎΠ΄).
  5. Referenced parameter – ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°, ΠΏΡ€ΠΈ промяна Π½Π° стойността Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС изпълнява ΠΊΠΎΠ΄ΡŠΡ‚ ΠΎΡ‚ сСкцията Script.

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

ΠŸΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към ΠΏΠΎΠΏΡŠΠ»Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. На Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π° Π²ΠΈΠ΄Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Groovy Script ΠΈΠ»ΠΈ Scriptler Script.
Π˜Π·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Scriptler Π΅ просто плъгин, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π²Π΅Ρ‡Π΅ написанитС ΠΎΡ‚ вас скриптовС ΠΈ позволява Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΈ поставянС.

Groovy ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° всички ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΎΡ‚ избрания Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:

AUTH = "Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π° Π² Base64"                           
GIT_URL = "url Π΄ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° SCM (https://bitbucket.org/)"                       
PROJECT_NAME = "ΠΈΠΌΠ΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Π°Ρ‚Π° област, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅"

def htmlBuild() {
    html = """
            <html>
            <head>
            <meta charset="windows-1251">
            <style type="text/css">
            div.grayTable {
            text-align: left;
            border-collapse: collapse;
            }
            .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead {
            padding: 0px 3px;
            }
            .divTable.grayTable .divTableBody .divTableCell {
            font-size: 13px;
            }
            </style>
            </head>
            <body>
        """

    def commitOptions = ""
    getCommitsForMicroservice(MICROSERVICE_NAME).each {
        commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>"
    }
    html += """<p style="display: inline-block;">
        <select id="commit_id" size="1" name="value">
            ${commitOptions}
        </select></p></div>"""

    html += """
            </div>
            </div>
            </div>
            </body>
            </html>
         """
    return html
}

def getCommitsForMicroservice(microserviceRepo) {
    def commits = [:]
    def endpoint = GIT_URL + "\/rest\/api\/1.0\/projects\/${PROJECT_NAME}\/repos\/${microserviceRepo}\/commits"
    def conn = new URL(endpoint).openConnection()
    conn.setRequestProperty("Authorization", "Basic ${AUTH}")
    def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
    response.values.each {
        commits.put(it.displayId, it.message)
    }
    return commits
}

return htmlBuild()

Ако Π½Π΅ Π½Π°Π²Π»ΠΈΠ·Π°ΠΌΠ΅ Π² Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ, Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° микросСрвиса (MICROSERVICE_NAME), ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° заявка Π΄ΠΎ Bitbucket (ΠΌΠ΅Ρ‚ΠΎΠ΄ getCommitsForMicroservice), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ API, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° id ΠΈ commit message Π½Π° всички ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π·Π° Ρ‚ΠΎΠ·ΠΈ микросСрвис.
ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнахмС, Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ трябва Π΄Π° Π²Ρ€ΡŠΡ‰Π° html, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π° страницата Build with Parameters Π² Jenkins, Π·Π°Ρ‚ΠΎΠ²Π° всички ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ стойности ΠΎΡ‚ Bitbucket ΠΎΠ±Π²ΠΈΠ²Π°ΠΌΠ΅ Π² списък ΠΈ добавямС Π² select.

Π‘Π»Π΅Π΄ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° всичкитС дСйствия, трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π°ΠΊΠ°Π²Π° красива страничка Build with Parameters.

Ако смС ΠΈΠ·Π±Ρ€Π°Π»ΠΈ микросСрвис test1:

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

Ако смС ΠΈΠ·Π±Ρ€Π°Π»ΠΈ микросСрвис test2:

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins job, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля

Π‘ΡŠΠ³Π»Π°ΡΠ΅Ρ‚Π΅ сС, Ρ‡Π΅ Π½Π° потрСбитСля Ρ‰Π΅ ΠΌΡƒ бъдС ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° взаимодСйства с Π²Π°ΡˆΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ всСки ΠΏΡŠΡ‚ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π° url ΠΈ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈ нуТния commit id.

P.S. Π’ Ρ‚Π°Π·ΠΈ статия Π΅ прСдставСн ΠΌΠ½ΠΎΠ³ΠΎ опростСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ вСроятно няма практичСско ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠ·ΠΈ Π²ΠΈΠ΄, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ сборкитС ΠΈΠΌΠ°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π½ΠΎ Ρ†Π΅Π»Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ статия бСшС Π΄Π° дСмонстрира Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° инструмСнта, Π° Π½Π΅ Π΄Π° прСдостави Ρ€Π°Π±ΠΎΡ‚Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

P.S.S. ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнах ΠΏΠΎ-Ρ€Π°Π½ΠΎ, Π°ΠΊΠΎ Ρ‚Π°Π·ΠΈ статия Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π°, слСдващата Ρ‰Π΅ бъдС Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π² Jenkins Ρ‡Ρ€Π΅Π· ΠΊΠΎΠ΄.

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

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