ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

На РИВ 2019 наш ΠΊΠΎΠ»Π»Π΅Π³Π° АлСксандр ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ² сдСлал Π΄ΠΎΠΊΠ»Π°Π΄ ΠΏΡ€ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² ЦИАН: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Тизнь ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Integro. Она отслСТиваСт ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π·Π°Π΄Π°Ρ‡, снимаСт с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ сокращаСт количСство Π±Π°Π³ΠΎΠ² Π² production. Π’ этом постС ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ Π΄ΠΎΠΊΠ»Π°Π΄ АлСксандра ΠΈ расскаТСм, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡˆΠ»ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ простых скриптов ΠΊ объСдинСнию open source ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ Ρ‡Π΅ΠΌ Ρƒ нас занимаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.
Β 

НулСвой ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

«НулСвого уровня Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚, я Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ знаю»
ΠœΠ°ΡΡ‚Π΅Ρ€ Shifu ΠΈΠ· ΠΌ/Ρ„ Β«ΠšΡƒΠ½Π³-Ρ„Ρƒ Панда»

Автоматизация Π² ЦИАН Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Ρ‡Π΅Ρ€Π΅Π· 14 Π»Π΅Ρ‚ послС основания ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π’ΠΎΠ³Π΄Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Ρ‹Π»ΠΎ 35 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. Π‘ Ρ‚Ρ€ΡƒΠ΄ΠΎΠΌ вСрится, Π΄Π°? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π²ΠΈΠ΄Π΅ автоматизация всС-Ρ‚Π°ΠΊΠΈ сущСствовала, Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ доставкС ΠΊΠΎΠ΄Π° Π½Π°Ρ‡Π°Π»ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² 2015 Π³ΠΎΠ΄Ρƒ.Β 

На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ нас Π±Ρ‹Π» ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚ ΠΈΠ· Python, C# ΠΈ PHP, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ Π½Π° Linux/Windows сСрвСрах. Для дСплоя этого монстра Ρƒ нас Π±Ρ‹Π» Π½Π°Π±ΠΎΡ€ скриптов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ запускали Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π‘Ρ‹Π»Π° Π΅Ρ‰Π΅ сборка ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°, приносящая боль ΠΈ страдания ΠΈΠ·-Π·Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ слиянии Π²Π΅Ρ‚ΠΎΠΊ, ΠΏΡ€Π°Π²ΠΊΠ°Ρ… Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ² ΠΈ пСрСсборкС «с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ Π² Π±ΠΈΠ»Π΄Π΅Β». Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ процСсс выглядСл Ρ‚Π°ΠΊ:

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

Нас это Π½Π΅ устраивало, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ повторяСмый, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ управляСмый процСсс сборки ΠΈ дСплоя. Для этого Π½Π°ΠΌ Π±Ρ‹Π»Π° Π½ΡƒΠΆΠ½Π° CI/CD систСма, ΠΈ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ бСсплатной вСрсиСй Teamcity ΠΈ бСсплатной Jenkins, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΈ ΠΎΠ±Π΅ устраивали нас ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Ρ‹Π±Ρ€Π°Π»ΠΈ Teamcity ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ свСТий ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ использовали ΠΌΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΈ Π½Π΅ рассчитывали Π½Π° большоС количСство Π·Π°Π΄Π°Ρ‡ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΈΠ΄Π΅Π΅ ΠΎ собствСнной систСмС

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Teamcity ΡƒΠ±Ρ€Π°Π»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹: ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΅Ρ‰Π΅ созданиС Pull Request-ΠΎΠ², ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ статусам Π² Jira, Π²Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ для Ρ€Π΅Π»ΠΈΠ·Π°. Π‘ этим систСма Teamcity ΡƒΠΆΠ΅ Π½Π΅ ΡΠΏΡ€Π°Π²Π»ΡΠ»Π°ΡΡŒ. НуТно Π±Ρ‹Π»ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ дальнСйшСй Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠœΡ‹ рассматривали Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скриптами Π² Teamcity ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° сторонниС систСмы Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Но Π² ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½Π° максимальная Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ собствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊ появилась пСрвая вСрсия Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ систСмы Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Integro.

Teamcity занимаСтся Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ запуска процСссов сборки ΠΈ дСплоя, Π° Integro ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСссов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. НуТно Π±Ρ‹Π»ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Π² Jira с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ связанного исходного ΠΊΠΎΠ΄Π° Π² Bitbucket. На этом этапС Π²Π½ΡƒΡ‚Ρ€ΠΈ Integro стали ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ свои workflow для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².Β 

Из-Π·Π° увСличСния Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² бизнСс-процСссах выросло число ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ run-ΠΎΠ² Π² Teamcity. Π’Π°ΠΊ ΠΏΡ€ΠΈΡˆΠ»Π° новая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΎΠ΄Π½ΠΎΠ³ΠΎ бСсплатного инстанса Teamcity стало Π½Π΅ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ (3 Π°Π³Π΅Π½Ρ‚Π° ΠΈ 100 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²), ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ инстанс (Π΅Ρ‰Π΅ 3 Π°Π³Π΅Π½Ρ‚Π° ΠΈ 100 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²), ΠΏΠΎΡ‚ΠΎΠΌ Π΅Ρ‰Π΅. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ систСму ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… кластСров, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΎ слоТно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ:

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

Когда встал вопрос ΠΎ 4 инстансС, ΠΌΡ‹ поняли, Ρ‡Ρ‚ΠΎ дальшС Ρ‚Π°ΠΊ ΠΆΠΈΡ‚ΡŒ нСльзя, Ρ‚. ΠΊ. совокупныС ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ 4 инстансов ΡƒΠΆΠ΅ Π½Π΅ Π»Π΅Π·Π»ΠΈ Π½ΠΈ Π² ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π°ΠΌΠΊΠΈ. Π’ΠΎΠ·Π½ΠΈΠΊ вопрос ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ ΠΏΠ»Π°Ρ‚Π½ΠΎΠΉ Teamcity ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ бСсплатной Jenkins. ΠœΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ расчСты ΠΏΠΎ инстансам ΠΈ ΠΏΠ»Π°Π½Π°ΠΌ ΠΏΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΆΠΈΡ‚ΡŒ Π½Π° Jenkins. Бпустя ΠΏΠ°Ρ€Ρƒ нСдСль ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° Jenkins ΠΈ избавились ΠΎΡ‚ части Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ, связанной с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… инстансов Teamcity. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ смогли ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Integro ΠΈ Π΄ΠΎΠΏΠΈΠ»ΠΈΠ²Π°Π½ΠΈΠΈ Jenkins ΠΏΠΎΠ΄ сСбя.

Π‘ ростом Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π² Π²ΠΈΠ΄Π΅ автоматичСского создания Pull Request-ΠΎΠ², сбора ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Code coverage ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ) появилось стойкоС ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ максимально ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ€ΡƒΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΠΈ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ€ΠΎΠ±ΠΎΡ‚Π°ΠΌ. Помимо этого Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ начался ΠΏΠ΅Ρ€Π΅Π΅Π·Π΄ Π½Π° микросСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈ частых Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π’Π°ΠΊ ΠΌΡ‹ постСпСнно ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ автоматичСским Ρ€Π΅Π»ΠΈΠ·Π°ΠΌ Π½Π°ΡˆΠΈΡ… микросСрвисов (ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ выпускаСм Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ·-Π·Π° слоТности процСсса). Но, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚, Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° новая ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.Β 

АвтоматизируСм тСстированиС

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

Из-Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΡƒΡΠΊΠΎΡ€ΠΈΠ»ΠΈΡΡŒ процСссы Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ частично Π·Π° счСт пропуска Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… этапов тСстирования. А это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ качСства. Π—Π²ΡƒΡ‡ΠΈΡ‚ банально, Π½ΠΎ вмСстС с ускорСниСм Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. НуТно Π±Ρ‹Π»ΠΎ Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ ΠΎΠ± Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстирования, ΠΏΡ€ΠΈΠ²ΠΈΡ‚ΠΈΠΈ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ отвСтствСнности (Ρ‚ΡƒΡ‚ Ρ€Π΅Ρ‡ΡŒ ΠΏΡ€ΠΎ «принятиС ΠΈΠ΄Π΅ΠΈ Π² Π³ΠΎΠ»ΠΎΠ²Π΅Β», Π° Π½Π΅ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Π΅ ΡˆΡ‚Ρ€Π°Ρ„Ρ‹) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π° выпускаСмый ΠΊΠΎΠ΄ ΠΈ Π±Π°Π³ΠΈ Π² Π½Π΅ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎ выпуску/Π½Π΅ выпуску Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‡Π΅Ρ€Π΅Π· автоматичСский Π΄Π΅ΠΏΠ»ΠΎΠΉ.Β 

Устраняя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с качСством, ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π΄Π²ΡƒΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ: стали ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½ΠΎΠ΅ тСстированиС ΠΈ Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ автоматичСский ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ„ΠΎΠ½Π° ошибок с автоматичСским Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ ошибки Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ попадания ΠΊΠΎΠ΄Π° Π² production, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎ врСмя рСагирования Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² production. Ошибки, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±Ρ‹Π²Π°ΡŽΡ‚, Π½ΠΎ ΠΌΡ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ Π±ΠΎΜΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ сил Π½Π΅ Π½Π° исправлСниС, Π° Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ.Β 

Команда Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ

БСйчас Ρƒ нас ΡˆΡ‚Π°Ρ‚ ΠΈΠ· 130 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ расти. Команда ΠΏΠΎ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ доставкС ΠΊΠΎΠ΄Π° (Π΄Π°Π»Π΅Π΅ β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° Deploy and Integration ΠΈΠ»ΠΈ DI) состоит ΠΈΠ· 7 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² 2 направлСниях: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Integro ΠΈ DevOps.Β 

DevOps ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Dev/Beta окруТСния сайта CIAN, окруТСния Integro, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ. НаправлСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Integro занимаСтся ΠΊΠ°ΠΊ самой Integro, Ρ‚Π°ΠΊ ΠΈ смСТными сСрвисами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ для Jenkins, Jira, Confluence, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ прилоТСния для ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².Β 

Команда DI Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ совмСстно с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, которая занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ВмСстС с этим, любой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ЦИАН ΠΌΠΎΠΆΠ΅Ρ‚ внСсти Π²ΠΊΠ»Π°Π΄ Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ΄ Π½ΡƒΠΆΠ΄Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ классной ΠΈΠ΄Π΅Π΅ΠΉ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅.

Π‘Π»ΠΎΠ΅Π½Ρ‹ΠΉ ΠΏΠΈΡ€ΠΎΠ³ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ЦИАН

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

ВсС систСмы, задСйствованныС Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° нСсколько слоСв:

  1. Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ систСмы (Jira, Bitbucket ΠΈ Π΄Ρ€.). Π‘ Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
  2. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Integro. Π§Π°Ρ‰Π΅ всСго Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π½Π΅ΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ всСй Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.
  3. БСрвисы доставки, оркСстрирования ΠΈ обнаруТСния (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Jeknins, Consul, Nomad). Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ΄ Π½Π° сСрвСрах ΠΈ обСспСчиваСм Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвисов Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.
  4. ЀизичСский ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (сСрвСра, ОБ, смСТноС ПО). На этом ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ наш ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ физичСский сСрвСр, Ρ‚Π°ΠΊ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ (LXC, KVM, Docker).

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΌΡ‹ Π΄Π΅Π»ΠΈΠΌ Π·ΠΎΠ½Ρ‹ отвСтствСнности Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ DI. Π”Π²Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… уровня Π»Π΅ΠΆΠ°Ρ‚ Π² Π·ΠΎΠ½Π΅ отвСтствСнности направлСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Integro, Π° Π΄Π²Π° послСдних уровня ΡƒΠΆΠ΅ Π² Π·ΠΎΠ½Π΅ отвСтствСнности DevOps. Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ позволяСт ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ… ΠΈ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ, Ρ‚. ΠΊ. ΠΌΡ‹ находимся рядом Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ постоянно обмСниваСмся знаниями ΠΈ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ.

Integro

БосрСдоточимся Π½Π° Integro ΠΈ Π½Π°Ρ‡Π½Π΅ΠΌ с тСхнологичСского стСка:

  • CentOs 7
  • Docker + Nomad + Consul + Vault
  • Java 11 (старый ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚ Integro останСтся Π½Π° Java 8)
  • Spring Boot 2.X + Spring Cloud Config
  • PostgreSql 11
  • RabbitMQΒ 
  • Apache Ignite
  • Camunda (embedded)
  • Grafana + Graphite + Prometheus + Jaeger + ELK
  • Web UI: React (CSR) + MobX
  • SSO: Keycloak

ΠœΡ‹ придСрТиваСмся ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° микросСрвисной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, хотя Ρƒ нас ΠΈ присутствуСт legacy Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π° Ρ€Π°Π½Π½Π΅ΠΉ вСрсии Integro. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ микросСрвис крутится Π² своСм docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, сСрвисы ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой посрСдством HTTP-запросов ΠΈ RabbitMQ-сообщСний. ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹ находят Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Ρ‡Π΅Ρ€Π΅Π· Consul ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊ Π½Π΅ΠΌΡƒ запрос, проходя Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· SSO (Keycloak, OAuth 2/OpenID Connect).

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

Π’ качСствС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим взаимодСйствиС с Jenkins, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… шагов:

  1. ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡ управлСния workflow (Π΄Π°Π»Π΅Π΅ Flow-микросСрвис) Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сборку Π² Jenkins. Для этого ΠΎΠ½ Ρ‡Π΅Ρ€Π΅Π· Consul Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ IP:PORT микросСрвиса ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Jenkins (Π΄Π°Π»Π΅Π΅ Jenkins-микросСрвис) ΠΈ отправляСт Π² Π½Π΅Π³ΠΎ асинхронный запрос Π½Π° запуск сборки Π² Jenkins.
  2. Jenkins-микросСрвис послС получСния запроса Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΎΡ‚Π΄Π°Π΅Ρ‚ Π² ΠΎΡ‚Π²Π΅Ρ‚ Job ID, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ВмСстС с этим ΠΎΠ½ запускаСт сборку Π² Jenkins Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² REST API.
  3. Jenkins выполняСт сборку ΠΈ послС Π΅Π΅ окончания отправляСт webhook с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ выполнСния Π² Jenkins-микросСрвис.
  4. Jenkins-микросСрвис, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² webhook, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ сообщСниС ΠΎΠ± ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса ΠΈ прикрСпляСт ΠΊ Π½Π΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС отправляСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ RabbitMQ.
  5. Π§Π΅Ρ€Π΅Π· RabbitMQ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΊ Flow-микросСрвису, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ·Π½Π°Π΅Ρ‚ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ своСй Π·Π°Π΄Π°Ρ‡ΠΈ, сопоставив Job ID ΠΈΠ· запроса ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ сообщСния.

БСйчас Ρƒ нас порядка 30 микросСрвисов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° нСсколько Π³Ρ€ΡƒΠΏΠΏ:

  1. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ конфигурациями.
  2. Π˜Π½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ (мСссСндТСры, ΠΏΠΎΡ‡Ρ‚Π°).
  3. Π Π°Π±ΠΎΡ‚Π° с исходным ΠΊΠΎΠ΄ΠΎΠΌ.
  4. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с инструмСнтами дСплоя (jenkins, nomad, consul ΠΈ Ρ‚. Π΄.).
  5. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², ошибок ΠΈ Ρ‚. Π΄.).
  6. Web-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ (UI для управлСния тСстовыми срСдами, сбора статистики ΠΈ Ρ‚. Π΄.).
  7. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с таск-Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ систСмами.
  8. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ workflow для Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

Workflow Π·Π°Π΄Π°Ρ‡ΠΈ

Integro Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ дСйствия, связанныС с ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ workflow Π·Π°Π΄Π°Ρ‡ΠΈ Π² Jira. Π’ Π½Π°ΡˆΠΈΡ… процСссах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ workflow Π² зависимости ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΈΠΏΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΎΠΏΡ†ΠΈΠΉ, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅.Β 

Рассмотрим workflow, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‡Π°Ρ‰Π΅ всСго:

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

На схСмС ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠ° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ transition вызываСтся Integro автоматичСски, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ„ΠΈΠ³ΡƒΡ€ΠΊΠ° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ transition вызываСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ. Рассмотрим нСсколько ΠΏΡƒΡ‚Π΅ΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π² этом workflow.

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ тСстированиС Π½Π° DEV+BETA Π±Π΅Π· ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Ρ… тСстов (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊ выпускаСм ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚):

ΠžΡ‚ скриптов ΠΊ собствСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅: ΠΊΠ°ΠΊ ΠΌΡ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² ЦИАН

ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ transition. Иногда ΠΏΡƒΡ‚ΡŒ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Π°, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ†ΠΈΠΈ Π² Jira.

Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ

Рассмотрим основныС шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ workflow «ВСстированиС Π½Π° DEV + ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅ тСсты»:

1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ PM создаСт Π·Π°Π΄Π°Ρ‡Ρƒ.

2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±Π΅Ρ€Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅ Π² статус IN REVIEW.

3. Jira отправляСт Webhook Π² сторону Jira-микросСрвиса (ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с Jira).

4. Jira-микросСрвис отправляСт запрос Π² Flow-сСрвис (ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ workflow, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСтся Ρ€Π°Π±ΠΎΡ‚Π°) для запуска workflow.

5. Π’Π½ΡƒΡ‚Ρ€ΠΈ Flow-сСрвиса:

  • ΠΠ°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Ρ€Π΅Π²ΡŒΡŽΠ΅Ρ€Ρ‹ для Π·Π°Π΄Π°Ρ‡ΠΈ (Users-микросСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π½Π°Π΅Ρ‚ всС ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ… + Jira-микросСрвис).
  • Π§Π΅Ρ€Π΅Π· Source-микросСрвис (Π·Π½Π°Π΅Ρ‚ ΠΎ рСпозиториях ΠΈ Π²Π΅Ρ‚ΠΊΠ°Ρ…, Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с самим ΠΊΠΎΠ΄ΠΎΠΌ) осущСствляСтся поиск Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΠ° нашСй Π·Π°Π΄Π°Ρ‡ΠΈ (для упрощСния поиска имя Π²Π΅Ρ‚ΠΊΠΈ совпадаСт с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Jira). Π§Π°Ρ‰Π΅ всСго Π·Π°Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚ лишь ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‚ΠΊΡƒ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ рСпозиториями.
  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ выполняСтся такая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий:

    i) Подлив master-Π²Π΅Ρ‚ΠΊΠΈ (Git-микросСрвис для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ΄ΠΎΠΌ).
    ii) Π’Π΅Ρ‚ΠΊΠ° блокируСтся ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ (Bitbucket-микросСрвис).
    iii) БоздаСтся Pull Request Π½Π° эту Π²Π΅Ρ‚ΠΊΡƒ (Bitbucket-микросСрвис).
    iv) ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ΡΡ сообщСниС ΠΎ Π½ΠΎΠ²ΠΎΠΌ Pull Request Π² Ρ‡Π°Ρ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² (Notify-микросСрвис для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с оповСщСниями).
    v) Π—Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ сборка, тСстированиС ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° DEV (Jenkins-микросСрвис для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Jenkins).
    vi) Если всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ Integro ставит свой Approve Π² Pull Request (Bitbucket-микросСрвис).

  • Integro ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Approve Π² Pull Request ΠΎΡ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅Π²ΡŒΡŽΠ΅Ρ€ΠΎΠ².
  • Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Approve (Π² Ρ‚. Ρ‡. ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ тСсты), Integro ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π·Π°Π΄Π°Ρ‡Ρƒ Π² статус Test on Dev (Jira-микросСрвис).

6. ВСстировщики проводят тСстированиС Π·Π°Π΄Π°Ρ‡ΠΈ. Если ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅Ρ‚, Ρ‚ΠΎ пСрСводят Π·Π°Π΄Π°Ρ‡Ρƒ Π² статус Ready For Build.

7. Integro Β«Π²ΠΈΠ΄ΠΈΡ‚Β», Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ Ρ€Π΅Π»ΠΈΠ·Ρƒ, ΠΈ запускаСт Π΅Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Jenkins-микросСрвис). Π“ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊ Ρ€Π΅Π»ΠΈΠ·Ρƒ опрСдСляСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ». НапримСр, Π·Π°Π΄Π°Ρ‡Π° Π² Π½ΡƒΠΆΠ½ΠΎΠΌ статусС, Π½Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, сСйчас Π½Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Ρ‹ΠΊΠ»Π°Π΄ΠΎΠΊ этого микросСрвиса ΠΈ Ρ‚. ΠΏ.

8. Π—Π°Π΄Π°Ρ‡Π° пСрСводится Π² статус Canary (Jira-микросСрвис).

9. Jenkins запускаСт Ρ‡Π΅Ρ€Π΅Π· Nomad Π΄Π΅ΠΏΠ»ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 1-3 инстанса) ΠΈ увСдомляСт ΠΎ Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠ΅ сСрвис ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² (DeployWatch-микросСрвис).

10. DeployWatch-микросСрвис собираСт Ρ„ΠΎΠ½ ошибок ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ, Ссли Π½ΡƒΠΆΠ½ΠΎ. ΠŸΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ Ρ„ΠΎΠ½Π° ошибок (Π½ΠΎΡ€ΠΌΠ° Ρ„ΠΎΠ½Π° рассчитываСтся автоматичСски) производится ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· Notify-микросСрвис. Если Ρ‡Π΅Ρ€Π΅Π· 5 ΠΌΠΈΠ½ΡƒΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π» (Π½Π°ΠΆΠ°Π» Revert ΠΈΠ»ΠΈ Stay), Ρ‚ΠΎ запускаСтся автоматичСский ΠΎΡ‚ΠΊΠ°Ρ‚ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Ρ… инстансов. Если Ρ„ΠΎΠ½ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½, Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Production (Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² UI). Если Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 60 ΠΌΠΈΠ½ΡƒΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ запустил Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Production, Ρ‚ΠΎ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅ инстансы Ρ‚Π°ΠΊΠΆΠ΅ Π² цСлях бСзопасности Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ°Ρ‡Π΅Π½Ρ‹.

11. ПослС запуска дСплоя Π½Π° Production:

  • Π—Π°Π΄Π°Ρ‡Π° пСрСводится Π² статус Production (Jira-микросСрвис).
  • Jenkins-микросСрвис запускаСт процСсс дСплоя ΠΈ увСдомляСт ΠΎ Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠ΅ DeployWatch-микросСрвис.
  • DeployWatch-микросСрвис провСряСт, Ρ‡Ρ‚ΠΎ Π½Π° Production обновились всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ (Π±Ρ‹Π»ΠΈ случаи, ΠΊΠΎΠ³Π΄Π° обновлялось Π½Π΅ всС).
  • Π§Π΅Ρ€Π΅Π· Notify-микросСрвис отправляСтся ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… дСплоя Π² Production.

12. Π£ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ 30 ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° запуск ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡ΠΈ с Production Π² случаС обнаруТСния Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ повСдСния микросСрвиса. По истСчСнии этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π°Ρ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π²Π»ΠΈΡ‚Π° Π² master (Git-микросСрвис).

13. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ merge-Π° Π² master статус Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π½Π° Closed (Jira-микросСрвис).

Π‘Ρ…Π΅ΠΌΠ° Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ шагов Π΅Ρ‰Π΅ большС), Π½ΠΎ позволяСт ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² процСссы. ΠœΡ‹ Π½Π΅ считаСм эту схСму идСальной ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅ΠΌ процСссы автоматичСского сопровоТдСния Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΠΈ дСплоя.

Π§Ρ‚ΠΎ дальшС

Π£ нас большиС ΠΏΠ»Π°Π½Ρ‹ ΠΏΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ Ρ€Π΅Π»ΠΈΠ·Π°Ρ… ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΈ автоматичСском Π΄Π΅ΠΏΠ»ΠΎΠ΅, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ взаимодСйствия с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

Но Π½Π° этом мСстС ΠΏΠΎΠΊΠ° остановимся. Много Ρ‚Π΅ΠΌ Π² ΠΎΠ±Π·ΠΎΡ€Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΎΡ…Π²Π°Ρ‚ΠΈΠ»ΠΈ повСрхностно, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅, поэтому ΠΌΡ‹ с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ Π½Π° вопросы. Π–Π΄Π΅ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΎΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ, ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ