БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

Π”ΠΎΠ±ΡŠΡ€ Π΄Π΅Π½, Π₯Π°Π±Ρ€!

ДнСс Π±ΠΈΡ… искал Π΄Π° сподСля Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Плъгин Π·Π° Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ ΠΈΠ·Π±ΠΎΡ€ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ДТСнкинс Π½Π°ΠΉ-ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΈ Π·Π° потрСбитСля.

въвСдСниС

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

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

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


БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

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

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΡƒΠ΄ΠΎΠ±Π½Π° Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins, която Ρ‰Π΅ стартира сглобяванСто ΠΈ (ΠΈΠ»ΠΈ) внСдряванСто Π½Π° ΠΈΠ·Π±Ρ€Π°Π½Π°Ρ‚Π° микроуслуга Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° вСрсия.

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

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

ИмамС няколко Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ изходния ΠΊΠΎΠ΄ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ микроуслуги.

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

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

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

ΠšΠΠšΠ’ΠžΠ’Πž Π•

Най-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° ΠΎΡ‚ Ρ‚ΠΈΠΏ String.

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

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

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

КАКВО ДА Π‘ΠͺΠ”Π•

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

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

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

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

АктивСн ΠΈΠ·Π±ΠΎΡ€ Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΠΈΠΌΠ° слСднитС ΠΏΠΎΠ»Π΅Ρ‚Π° Π·Π° попълванС:

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

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

НСка Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към ΠΏΠΎΠΏΡŠΠ»Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π½ΠΈ сС Π΄Π²Π° Π²ΠΈΠ΄Π° изпълнСниС, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅: ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Groovy скрипт ΠΈΠ»ΠΈ Scriptler скрипт.
НиС ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ 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 ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅ Π½Π° всички Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ Π·Π° Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° микроуслуга.
ΠšΠ°ΠΊΡ‚ΠΎ спомСнахмС ΠΏΠΎ-Ρ€Π°Π½ΠΎ, Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ трябва Π΄Π° Π²ΡŠΡ€Π½Π΅ html, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° страницата Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Jenkins, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΎΠ±Π²ΠΈΠ²Π°ΠΌΠ΅ всички ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ стойности ΠΎΡ‚ Bitbucket Π² списък ΠΈ Π³ΠΈ добавямС към ΠΈΠ·Π±Ρ€Π°Π½ΠΎΡ‚ΠΎ.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ изпълним всички ΡΡ‚ΡŠΠΏΠΊΠΈ, трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π°ΠΊΠ°Π²Π° красива страница Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.

Ако стС ΠΈΠ·Π±Ρ€Π°Π»ΠΈ микроуслугата test1:

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

Ако стС ΠΈΠ·Π±Ρ€Π°Π»ΠΈ микроуслугата test2:

БъздаванС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π·Π°Π΄Π°Ρ‡Π° Π½Π° Jenkins ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си лСсна Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅

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

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

PSS ΠšΠ°ΠΊΡ‚ΠΎ писах ΠΏΠΎ-Ρ€Π°Π½ΠΎ, Π°ΠΊΠΎ Ρ‚Π°Π·ΠΈ статия Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π°, слСдващата Ρ‰Π΅ бъдС Π·Π° Ρ‚ΠΎΠ²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π° конфигурация Π½Π° Jenkins Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‡Ρ€Π΅Π· ΠΊΠΎΠ΄.

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

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