ΠΠ»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ΅Π½ Π΄ΠΆΠ΅Π½ΠΊΠΈΠ½Ρ
ΠΠΈΡΠ²Π° Jenkins ΠΈ GitLab CI/CD
Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΏΠ΅Ρ ΠΈ Π² ΡΡΠ΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ (Continuous Integration, CI) ΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ (Continuous Delivery, CD). Π Π°Π·Π²ΠΈΡΠΈΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΠΠ (Development Operations, DevOps) ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ Π±ΡΡΡΡΠΎΠΌΡ ΡΠΎΡΡΡ ΡΠΏΡΠΎΡΠ° Π½Π° CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ»ΡΡΡΠ°ΡΡΡΡ, ΡΡΡΠ΅ΠΌΡΡΡ ΠΈΠ΄ΡΠΈ Π² Π½ΠΎΠ³Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, Π²ΡΡ ΠΎΠ΄ΡΡ ΠΈΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, Π² ΠΌΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΠ (Quality Assurance, QA) ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². ΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ Π±ΠΎΠ³Π°ΡΡΡΠ²Π΅ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΠ΄Π±ΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅Π»ΡΠ³ΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ.
Π‘ΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ CI/CD ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎ, ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠΌΡ, ΠΊΡΠΎ ΠΈΡΠ΅Ρ ΡΡΠΎ-ΡΠΎ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΠ΅ΡΡ. Π Π΅ΡΡ ΠΈΠ΄ΡΡ ΠΎ Jenkins ΠΈ ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ΅ GitLab CI/CD, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ GitLab. Π£ Jenkins ΠΈΠΌΠ΅Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ 16000 Π·Π²ΡΠ·Π΄ Π½Π° GitHub. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ GitLab Π½Π° gitlab.com Π½Π°Π±ΡΠ°Π» ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ 2000 Π·Π²ΡΠ·Π΄. ΠΡΠ»ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², ΡΠΎ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Jenkins Π½Π°Π±ΡΠ°Π» Π² 8 ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅ Π·Π²ΡΠ·Π΄, ΡΠ΅ΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, Π² ΡΠΎΡΡΠ°Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΠΎΠ΄ΠΈΡ GitLab CI/CD. ΠΠΎ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΡΠΎ β Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΡΡΡ ΠΈ ΠΌΠ°ΡΡΠ° Π΄ΡΡΠ³ΠΈΡ , ΠΈ ΡΡΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΡΠΎ, ΡΡΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡΡ Jenkins ΠΈ GitLab CI/CD ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΎΡΠ΅Π½Ρ Π±Π»ΠΈΠ·ΠΊΠΎ Π΄ΡΡΠ³ ΠΊ Π΄ΡΡΠ³Ρ.
ΠΠΎΠ·ΡΠΌΡΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ G2, ΠΊΠΎΡΠΎΡΠ°Ρ Π°ΠΊΠΊΡΠΌΡΠ»ΠΈΡΡΠ΅Ρ ΠΎΡΠ·ΡΠ²Ρ ΠΎ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°Ρ ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π²ΡΡ ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ. ΠΠ΄Π΅ΡΡ ΡΡΠ΅Π΄Π½ΠΈΠΉ ΡΠ΅ΠΉΡΠΈΠ½Π³ Jenkins, Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ 288 ΠΎΡΠ·ΡΠ²ΠΎΠ², ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 4,3 Π·Π²Π΅Π·Π΄Ρ. Π ΠΎ GitLab ΡΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ 270 ΠΎΡΠ·ΡΠ²ΠΎΠ², ΡΡΠ΅Π΄Π½ΠΈΠΉ ΡΠ΅ΠΉΡΠΈΠ½Π³ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 4,4 Π·Π²Π΅Π·Π΄Ρ. ΠΡ Π½Π΅ ΠΎΡΠΈΠ±ΡΠΌΡΡ, Π·Π°ΡΠ²ΠΈΠ², ΡΡΠΎ Jenkins ΠΈ GitLab CI/CD ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π½Π° ΡΠ°Π²Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ . ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Jenkins ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² 2011 Π³ΠΎΠ΄Ρ ΠΈ Ρ ΡΠ΅Ρ Π²ΡΠ΅ΠΌΡΠ½ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ·Π»ΡΠ±Π»Π΅Π½Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ². ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡ GitLab CI/CD, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ Π² 2014 Π³ΠΎΠ΄Ρ, Π·Π°Π½ΡΠ» ΡΠ²ΠΎΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΈΠ΅, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠΌ ΡΡΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ.
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ Jenkins Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌΠΈ, ΡΠΎ ΠΎΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΌΡ, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π² ΡΡΠ°ΡΡΡ, Π³Π΄Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»ΠΈΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Travis CI ΠΈ Jenkins, ΡΡΡΡΠΎΠΈΠ»ΠΈ ΠΎΠΏΡΠΎΡ. Π Π½ΡΠΌ ΠΏΠΎΡΡΠ°ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ 85 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. Π Π΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠ°ΠΌ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΈΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ. 79% Π²ΡΠ±ΡΠ°Π»ΠΈ Jenkins, 5% Π²ΡΠ±ΡΠ°Π»ΠΈ Travis CI, Π° 16% ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.
Π‘ΡΠ΅Π΄ΠΈ Π΄ΡΡΠ³ΠΈΡ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΡΡ GitLab CI/CD.
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ΅ΡΡΡΠ· Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΠ΅ΡΡ DevOps, ΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π±ΠΈΡΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΡΡΠΈΡΡΠ²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΅Π³ΠΎ Π±ΡΠ΄ΠΆΠ΅Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ, ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π°Π½Π°Π»ΠΈΠ· Jenkins ΠΈ GitLab CI/CD. ΠΡΠΎ, Ρ ΠΎΡΠ΅ΡΡΡ Π½Π°Π΄Π΅ΡΡΡΡΡ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ.
ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ Jenkins
Jenkins β ΡΡΠΎ ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ, Π³ΠΈΠ±ΠΊΠΈΠΉ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π·Π°Π΄Π°Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ. Jenkins ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Java, ΠΎΠ½ Π²ΡΠΏΡΡΠ΅Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT. ΠΠ½ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΌΠΎΡΠ½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π·Π°Π΄Π°Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ, Π²ΡΠΏΡΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . Π‘ΡΠ΅Π΄ΠΈ Π½ΠΈΡ β macOS, Windows ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² Linux, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ β OpenSUSE, Ubuntu ΠΈ Red Hat. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Jenkins, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΠ‘, ΡΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² Docker ΠΈ Π² Π»ΡΠ±ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, Π³Π΄Π΅ Π΅ΡΡΡ JRE (Java Runtime Environment).
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Jenkins ΡΠΎΠ·Π΄Π°Π»ΠΈ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ, Jenkins X, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΡΡΠΈΡΠ°Π½ Π½Π° ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠ΅Π΄Π΅ Kubernetes. Π Jenkins X ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Ρ Helm, ΡΠ΅ΡΠ²Π΅Ρ Jenkins CI/CD, Kubernetes ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ DevOps. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ GitOps.
Π ΠΊΠΎΠΏΠΈΠ»ΠΊΡ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ² Jenkins ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ Π΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ, ΠΏΠΎΠ½ΡΡΠ½Ρ, ΠΈΡ Π»Π΅Π³ΠΊΠΎ ΡΠΈΡΠ°ΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π° Jenkins ΡΠΎΠ·Π΄Π°Π»Π° ΠΎΠΊΠΎΠ»ΠΎ 1000 ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Ρ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Jenkins Ρ ΡΠ°ΠΌΡΠΌΠΈ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠΌΠΈ. Π ΡΠΊΡΠΈΠΏΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΡΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ Π·Π°ΠΊΡΡΡΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ.
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Jenkins ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΅Π³ΠΎ ΡΠ°Π³Π΅, Π·Π° ΡΠ΅ΠΌ, ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ ΡΡΠ°ΠΏΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠ°Π²Π΄Π°, Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡ Π½Π΅ΠΊΠΈΠΉ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π° ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Jenkins
Π‘ΡΠ΅Π΄ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Jenkins ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠΎΡΡΠΎΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π²ΡΡΠΎΠΊΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ DevOps-Π·Π°Π΄Π°Ρ, ΡΠΎ Π·Π΄Π΅ΡΡ Jenkins ΡΡΠΈΡΠ°Π΅ΡΡΡ Π²Π΅ΡΡΠΌΠ° Π½Π°Π΄ΡΠΆΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° Π²ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π ΡΠ»ΡΡΠ°Π΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Jenkins.
β1. ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎΡΡΡ, ΠΎΡΠΊΡΡΡΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌ
Jenkins ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ macOS, Windows ΠΈ Linux. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π² ΡΡΠ΅Π΄Π΅ Docker, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΠ΅ ΠΈ Π±ΡΡΡΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π°Π΄Π°Ρ. ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΡΠ²Π»Π΅ΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ , ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ Java, Π² ΡΠ°ΠΊΠΈΡ , ΠΊΠ°ΠΊ Apache Tomcat ΠΈ GlassFish. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Jenkins ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π°.
β2. Π Π°Π·Π²ΠΈΡΠ°Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²
ΠΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Jenkins Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·Π²ΠΈΡΠΎΠΉ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄ΡΡΠ³ΠΈΡ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ 1500 ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π΄Π»Ρ Jenkins. ΠΡΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Ρ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΏΠ΅ΠΊΡΡΠ° Π·Π°Π΄Π°Ρ, Ρ ΠΈΡ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΡΠ΅ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ. ΠΠΎΠ³Π°ΡΡΡΠ²ΠΎ Π²ΡΠ±ΠΎΡΠ° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ ΡΠΎΠ³ΠΎ, ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Jenkins, Π½Π΅Ρ ΠΎΡΡΡΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΠΎΠΊΡΠΏΠΊΠ΅ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠΈΡ ΠΏΠ»Π°ΡΠ½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Jenkins Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ DevOps-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ².
β3. ΠΡΠΎΡΡΠ°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
Jenkins Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΎΠΆΠ΅ ΡΡΡΡΠΎΠ΅Π½ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ. Π’ΡΡ, ΠΎΠΏΡΡΡ ΠΆΠ΅, ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΎΡΠ²Π΅ΡΡ Π½Π° ΡΠ°ΠΌΡΠ΅ ΡΠ°Π·Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ Jenkins.
β4. ΠΡΡΠΆΠ΅Π»ΡΠ±Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Jenkins β ΡΡΠΎ ΠΎΠΏΠ΅Π½ΡΠΎΡΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². ΠΠΎΠΊΡΡΠ³ Jenkins ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π‘ΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΊΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ Jenkins.
β5. ΠΠ°Π»ΠΈΡΠΈΠ΅ REST API
Π Ρ ΠΎΠ΄Π΅ ΡΠ°Π±ΠΎΡΡ Ρ Jenkins ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ REST API, ΡΡΠΎ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ. API Π΄Π»Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² ΡΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ : XML, JSON Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ JSONP, Python. ΠΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠ°Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ REST API Jenkins.
β6. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ
Jenkins ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ DevOps-Π·Π°Π΄Π°Ρ. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π·Π° ΡΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½.
β7. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΡΠ΅Π΄Π°Ρ
Jenkins ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ². ΠΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡ Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π³Π»Π°Π²Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Jenkins ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΡΠΈΠ½ΡΠ½Π½ΡΡ ΠΌΠ°ΡΠΈΠ½. ΠΠΎΠ΄ΡΠΈΠ½ΡΠ½Π½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΡΠ°Π·Π½ΡΡ ΡΡΠ΅Π΄Π°Ρ . ΠΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡ Jenkins ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ GitLab
GitLab CI/CD ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ Π½ΠΎΠ²ΡΡ ΠΈ ΡΠ°ΠΌΡΡ Π»ΡΠ±ΠΈΠΌΡΡ DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ°ΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΎΠΏΠ΅Π½ΡΠΎΡΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π²ΡΡΡΠΎΠ΅Π½ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ GitLab. Π£ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ GitLab Π΅ΡΡΡ community-Π²Π΅ΡΡΠΈΡ, ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ, ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄-ΡΠ΅Π²ΡΡ, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ GitLab Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΡΠ²ΡΠ·ΡΠ²Π°Ρ ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Active Directory ΠΈ Ρ LDAP-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠΎΡ Π²ΠΈΠ΄Π΅ΠΎΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ GitLab CI/CD.
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ GitLab CI/CD Π±ΡΠ» Π²ΡΠΏΡΡΠ΅Π½ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π½ΠΎ Π² 2015 Π³ΠΎΠ΄Ρ ΡΡΠΎΡ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ» ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ Π² GitLab 8.0. ΠΡΠ΄Π΅Π»ΡΠ½ΡΠΉ GitLab CI/CD-ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 25000 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ Π²ΡΡΠΎΠΊΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡΡ.
GitLab CI/CD ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ GitLab Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π½Π° Ruby ΠΈ Π½Π° Go. ΠΠ½ΠΈ Π²ΡΠΏΡΡΠ΅Π½Ρ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT. GitLab CI/CD, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π±ΠΎΡ.
ΠΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ GitLab CI/CD Π² ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ GitLab CI/CD ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π΅Π»ΠΈΡΡΡ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠ°Π΄Π°ΡΠΈ ΠΏΠΎΠ΄Π΄Π°ΡΡΡΡ ΡΠΎΠ½ΠΊΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅.
ΠΠ°Π΄Π°ΡΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠ°Π΄ΠΈΠΉ ΠΈ Π·Π°Π΄Π°Ρ CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π³ΠΎΡΠΎΠ² ΠΊ ΡΠ°Π±ΠΎΡΠ΅. ΠΠ° Ρ ΠΎΠ΄ΠΎΠΌ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π·Π°Π΄Π°Ρ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ GitLab CI/CD ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΠ΄ΠΎΠ±Π½Π΅Π΅, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ GitLab CI/CD ΠΈ GitLab
GitLab CI/CD β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ DevOps-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎΠ΅ΠΊΡ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ, Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ GitLab CI/CD, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π΄Π°ΡΡ Π²Π°ΠΌ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΠ΅Π³ΠΎ ΠΎΡ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ. ΠΠ°Π΄ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ GitLab, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ GitLab CI/CD.
β1. ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ
GitLab CI/CD β ΡΡΠΎ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π½Π°ΡΠ΅Π΄ΡΠΈΠΉ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. GitLab CI/CD ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΡΠ°Π» ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ. ΠΡΠΎ, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅, Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ GitLab.
β2. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° GitLab Pages ΠΈ Jekyll
β3. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°ΠΏΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ²ΡΡΠ°Π΅ΡΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΈΡ Π³ΡΡΠΏΠΏ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ°Π±ΠΎΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π΄Π°ΡΡ.
β4. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ CI-ΡΠ°Π½Π½Π΅ΡΠΎΠ²
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π½Π½Π΅ΡΠΎΠ², ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΡ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΡΡΠ·Π½ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π½Π° ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π°ΡΠ΅Π½Π΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ β Π΅ΡΠ»ΠΈ ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΎ ΡΡΠ΅Π΄Π°Ρ , Π³Π΄Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠΎΡΡΠΎΡΡΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π².
β5. Π‘ΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
ΠΠΎΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ GitLab ΠΏΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Π½ΡΠΎΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ. GitLab CI/CD ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π΅ΡΠΎΠΊ ΠΊΠΎΠ΄Π°. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ ΡΠ΄ΠΎΠ±Π½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΎ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ GitLab CI/CD ΠΎΡ Jenkins.
β6. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ
ΠΠ»Π°ΡΡΠΎΡΠΌΠ° GitLab ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΌ, ΠΊΡΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π² Π½Π΅ΠΊΠΎΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΏΡΠ°Π²Π°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΡ ΡΠΎΠ»ΡΠΌ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
β7. ΠΠΊΡΠΈΠ²Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°
ΠΠΎΠΊΡΡΠ³ GitLab ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΡΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ β GitLab CI/CD. ΠΠ»ΡΠ±ΠΎΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ GitLab CI/CD ΠΈ GitLab, ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠΎΡΠ΅Π³ΠΎ, ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠΎΠ² Π½Π° Π²ΠΎΠΏΡΠΎΡΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ GitLab CI/CD.
β8. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ
GitLab CI/CD β ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΠΌ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ GitLab. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π² GitHub-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, Π° CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π° Π±Π°Π·Π΅ GitLab Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ GitLab CI/CD.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Jenkins ΠΈ GitLab CI/CD
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° | Jenkins | GitLab CI/CD |
ΠΡΠΊΡΡΡΡΠΉ ΠΈΠ»ΠΈ Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠΎΠ΄ | ΠΡΠΊΡΡΡΡΠΉ ΠΊΠΎΠ΄ | ΠΡΠΊΡΡΡΡΠΉ ΠΊΠΎΠ΄ |
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° | Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ. | ΠΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ β Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ GitLab. |
Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². | ΠΠ»ΡΠ±ΠΎΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ. |
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° | ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ. | ΠΠΌΠ΅Π΅ΡΡΡ. |
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° | Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ | Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ |
Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ | ΠΡΠΎ β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ. | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ. |
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ CI/CD-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ² | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Jenkins Pipeline. | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ. |
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ | ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ. | ΠΠΌΠ΅Π΅ΡΡΡ. |
ΠΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° | Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ 1000 ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². | Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ GitLab. |
API | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π²ΠΈΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ API. | ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ API Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΡ. |
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° JavaScript | ΠΠΌΠ΅Π΅ΡΡΡ. | ΠΠΌΠ΅Π΅ΡΡΡ. |
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌΠΈ (Slack, GitHub). | ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ β Ρ GitHub ΠΈ Kubernetes. |
ΠΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π° | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° SonarQube ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ. |
Π Π°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Jenkins ΠΈ GitLab CI/CD
ΠΠΏΠΈΡΠ°Π² ΠΈ ΡΡΠ°Π²Π½ΠΈΠ² Jenkins ΠΈ GitLab CI/CD, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΡ ΡΡΠΈΡ DevOps-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ½Π°Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠΎΠ½ΡΡΡ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΡΡΠ³ΠΎΠΌΡ.
Jenkins ΠΈ GitLab CI/CD: ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΈ ΡΠ»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ
Π‘Π΅ΠΉΡΠ°Ρ Ρ Π²Π°Ρ ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Jenkins ΠΈ GitLab CI/CD. Π’Π΅ΠΏΠ΅ΡΡ, ΡΡΠΎΠ±Ρ Π²Ρ Π΅ΡΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ ΡΡΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΠΈΡ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΈ ΡΠ»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ. ΠΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ Π²Ρ ΡΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½. Π₯ΠΎΡΠ΅ΡΡΡ Π½Π°Π΄Π΅ΡΡΡΡΡ, ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ΅Π±Ρ.
βΠ‘ΠΈΠ»ΡΠ½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ Jenkins
βΠ‘Π»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ Jenkins
βΠ‘ΠΈΠ»ΡΠ½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ GitLab CI/CD
βΠ‘Π»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ GitLab CI/CD
ΠΡΠΎΠ³ΠΈ
Π Jenkins, ΠΈ GitLab CI/CD ΠΈΠΌΠ΅ΡΡ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΈ ΡΠ»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ. ΠΡΠ²Π΅Ρ Π½Π° Π²ΠΎΠΏΡΠΎΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ, Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½ΡΠΆΠ΄ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ CI/CD-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ, Ρ ΠΎΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ Jenkins β ΡΡΠΎ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π° GitLab CI/CD β ΡΡΠΎ ΡΠ°ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΡΠ±ΠΈΡΠ°Ρ CI/CD-ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠΎΠΈΡ, ΠΏΠΎΠΌΠΈΠΌΠΎ Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Ρ Π½Π΅ΠΉ ΡΠ²ΡΠ·Π°Π½Ρ, ΠΈ ΡΠΎ, Ρ ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΈΡΠΊΠ° Π² ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ β CI/CD
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ Jenkins, ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ CI/CD, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΊΡΠΎ-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΡΠ΅ΡΠΈΡΡ.
ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ CI/CD
ΠΡ Π½Π°ΡΠ°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ°ΠΏΠΎΠ². ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΌ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ ΡΠ°Π·ΡΡΠ²Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ, Π΄Π΅Π»Π°Ρ Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π±Π΅ΡΡΠΎΠ²Π½ΡΠΌ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ, ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ-ΡΠ΅ΡΠ²Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°-ΠΠ³Π΅Π½ΡΠ°
ΠΠ»Π°Π³ΠΈΠ½Ρ
ΠΠ»Π°Π³ΠΈΠ½Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ ΡΡΠΏΠ΅Ρ Π° ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°. ΠΡΠ±ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Java ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΈΠΌ Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ. ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π΅Ρ ΡΡΠΎ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ² ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ. ΠΠ°ΠΊΠΎΠΉ Π±Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π²Ρ Π½ΠΈ Ρ ΠΎΡΠ΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅, ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ½Π°Π±Π΄ΠΈΡ Π²Π°Ρ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π»Π΅Π³ΡΠΈΡ Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ ΡΡΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ.
ΠΠΎΠΌΠΈΠΌΠΎ Π°ΡΠΏΠ΅ΠΊΡΠ° ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΌΠΈΠΌ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠΎΠΌ β ΠΎΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΠΈΡ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ
ΠΠ° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅Π³ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ° Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°ΡΡΡΠ° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΠ»Π°ΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠΊΠΎΡΠ±ΠΈΡΠ΅Π»ΡΠ½Π°Ρ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ Π±ΡΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ Π½Π°Π·Π°Π΄, ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎ. Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ, Π²ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΈΡΠ½ΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ²:
ΠΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΠ°Ρ ΠΠ΅Π΄ΡΡΠ°Ρ/ΠΠ΅Π΄ΠΎΠΌΠ°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ/ΠΠ³Π΅Π½Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈΠ·-Π·Π° Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΡ ΠΊΠΎΠ½Π½ΠΎΡΠ°ΡΠΈΠΉ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° JDK/JRE
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ openjdk-11-jdk :
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ apt
ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Linux, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΡΠΈΡ LTS ( ΠΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 12 Π½Π΅Π΄Π΅Π»Ρ, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π²Π΅Π±-ΡΠ°ΠΉΡΡ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠΌΠΈΠ½Π°Π»:
ΠΠΎΡΡΡΠΏ ΠΊ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΡ ΠΈΠ· Π±ΡΠ°ΡΠ·Π΅ΡΠ°
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°
ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ-ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°:
ΠΡΠΎΡΡΠ°Ρ ΠΠΎΠΊΠ°Π»ΡΠ½Π°Ρ Π‘Π±ΠΎΡΠΊΠ°
Π§ΡΠΎΠ±Ρ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Maven β ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΏΠ»Π°Π³ΠΈΠ½ Maven Π΄Π»Ρ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΊ ΠΎΠΏΡΠΈΠΈ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠΎΠΌ :
ΠΠΎΠΆΠ΄ΠΈΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Maven
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
Git Essentials
ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΡΡΠΈΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ ΠΏΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Git, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΈ ΠΏΡΠΈΠ½ΡΡΡΠ΅ Π² ΠΎΡΡΠ°ΡΠ»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΡ. ΠΡΠ΅ΠΊΡΠ°ΡΠΈΡΠ΅ Π³ΡΠ³Π»ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Git ΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΠ·ΡΡΠΈΡΠ΅ ΡΡΠΎ!
ΠΠ°ΠΏΡΡΠΊ ΡΠ±ΠΎΡΠΊΠΈ
ΠΠ°ΡΡΡΠΎΠΈΠ² ΡΠ°Π³ΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΡΠ±ΠΎΡΠΊΡ. ΠΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΎΠΎΠ±ΡΠΈΡ Π½Π°ΠΌ ΠΎ Ρ ΠΎΠ΄Π΅ ΡΠ°Π±ΠΎΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΈΡΡΠΎΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠ΅ΡΠ΄Π°ΡΠ½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ (#1) Π±ΡΠ΄ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ.
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΡΠ²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ:
ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ GitHub ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°
ΠΠ°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°. Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΈ Π² CVS ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
Π£ΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ GitHub
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ssh-keygen :
ΠΡΠ±Π΅ΡΠΈΡΠ΅, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡ ΠΊΠ»ΡΡΠΈ, ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΅Π³ΠΎ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ°ΡΡΡΡΡ Git ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π° Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Git β ΠΎΠ½ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° GitHub, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠ»ΡΠΆΠ±Π΅ Ρ ΠΎΡΡΠΈΠ½Π³Π°, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ BitBucket ΠΈ GitLab.
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° Groovy, ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ βΠ€Π°ΠΉΠ» ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°β (Π±Π΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ) ΠΈ Π·Π°ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ/ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π΅Π³ΠΎ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ:
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ°ΠΏΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΈΡΡΠΌΠΎ Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° URL-Π°Π΄ΡΠ΅Ρ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Π²Π½ΠΎΡΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ» ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°, Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π½ΠΎΠ²Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
Π‘Π»ΡΠΆΠ΅Π±Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅
ΠΠ½ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°:
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΡΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π²Π΅Π΄Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ²ΡΠΆΠ΅ΠΌΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ, ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ Ρ.Π΄. Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²Π²ΠΎΠ΄Π° ΠΏΠ°ΡΠΎΠ»Ρ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΌΠ°ΡΠΊΠ΅Ρ API.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΠΊΠ΅ΡΠ° API
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°, Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΈ ΡΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ:
Π‘ΠΏΠΈΡΠΎΠΊ Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ
ΠΠΌΠΏΠΎΡΡ/ΠΠΊΡΠΏΠΎΡΡ Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΠ°Π΄Π°Π½ΠΈΠΉ
ΠΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π² Jenkins ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ XML. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅. ΠΠΎΠΌΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ»Π°Π³ΠΈΠ½Ρ ΠΈ ΡΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π²ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π² XML.
ΠΡΠ²ΠΎΠ΄
ΠΠ»ΡΡΠ΅Π²ΠΎΠΉ Π²ΡΠ²ΠΎΠ΄ Π·Π΄Π΅ΡΡ β ΡΡΠΎ ΠΌΠΎΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ. Π‘ΡΠΎΠΈΡ Π²Π»ΠΎΠΆΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ ΡΡΠΈΠ»ΠΈΡ Π² ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΡΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ. ΠΡΠ΄Π°ΡΠ° ΠΎΡ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΉ Π½Π΅ΠΎΡΠ΅Π½ΠΈΠΌΠ°.
ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΡ Ρ ΠΌΠΎΡΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡΡ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ°. Π₯ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ, Π²Π°ΡΠΈ Π·Π½Π°Π½ΠΈΡ ΠΎ ΠΠΆΠ΅Π½ΠΊΠΈΠ½ΡΠ΅ Π²Π·Π»Π΅ΡΡΡ Π΄ΠΎ Π½Π΅Π±Π΅Ρ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π°ΡΠ½Π΅ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΠΌΠ΅ΡΠΈΠ²Π°Ρ ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠ·ΡΠΊΠΈ ΠΈ ΡΡΠ΅Π΄Ρ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ (Deployment) Ρ ΠΏΠΎΠΌΠΎΡΡΡ Jenkins
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΠ½Π΅ Π±ΡΠ»ΠΎ ΡΡΡΠ΄Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Jenkins, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ°ΡΠ΅ΠΉ ΠΏΠΎ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΡΡΠ°ΡΠ΅Π»ΠΈ. ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΠΊΠΎΠΌΡ-ΡΠΎ ΡΠ°Π±ΠΎΡΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΠΌ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠΎΠΉΡΠΈ ΠΌΠ½Π΅, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π΅Π³ΠΎ.
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Jenkins?
Jenkins β ΡΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠΏΡΠΎΡΠ°Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Jenkins (ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π³ΠΎΡΠΎΠ²Ρ. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π²ΠΈΠ΄Π΅ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ PR Ρ master (ΠΈΠ»ΠΈ main).
ΠΠΎΡΠ΅ΠΌΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Jenkins?
Π£ Π½Π΅Π³ΠΎ ΡΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΉΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Jenkins ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ, ΠΈ Ρ Π½Π°Π΄Π΅ΡΡΡ Π΄ΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΈΡΠ°ΠΉΡΠ΅ Π΄Π°Π»ΡΡΠ΅.
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ CI/CD Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Node Ρ ΠΏΠΎΠΌΠΎΡΡΡ Jenkins. ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ°Π³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠΌΠ΅ΠΌ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΠΌ ΠΈΡ Π½ΠΈΠΆΠ΅:
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ GitHub Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ node
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ node ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° GitHub
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Heroku Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π²Π΅Π±-Ρ ΡΠΊ GitHub Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Jenkins
Π‘ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Jenkins
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ GitHub Π² Jenkins
Π‘ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠΉΡΠ΅ Jenkins Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π½Π° Heroku ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ
Π£ΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π½Π° GitHub. ΠΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π·Π΄Π΅ΡΡ.
Π£ΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ Heroku. ΠΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π·Π΄Π΅ΡΡ.
Π£ΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π½Π° GitHub. ΠΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π·Π΄Π΅ΡΡ.
Π£ΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ Heroku. ΠΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ!
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΊΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ repository_url Π½Π° ΡΠ²ΠΎΠΉ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎ, ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π±Π»ΠΎΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π²Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° package.json, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ start ΠΈ test Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ express Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ node, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠ½ΡΡΠ°Π»Π»ΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ, Π·Π°ΠΏΡΡΡΠΈΠ² ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅:
ΠΠ°Π»Π΅Π΅ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» index.js, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΠΎΡΠΊΠΎΠΉ Π²Ρ ΠΎΠ΄Π° Π² Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ node, ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ:
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ npm start ΠΈ Π·Π°ΠΉΠ΄ΠΈΡΠ΅ Π½Π° http://localhost:4000/ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°ΡΠ·Π΅Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Node, Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ Hello world.
ΠΠ°Π»Π΅Π΅ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°ΡΡ ΡΠ΅ΡΡΠΎΠ² Π² Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ CI, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠ°ΠΊ, Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π», ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ jest ΠΈ supertest Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠ°Π»Π΅Π΅ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ __test__ (Π΄Π²Π° Π·Π½Π°ΠΊΠ° ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ). ΠΠ½ΡΡΡΠΈ ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ __test__ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» index.test.js ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² Π½Π΅Π³ΠΎ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ (Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡΠΌΠΈ).
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ npm test ΠΈΠ»ΠΈ npm run test Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅, ΠΈ Π²Ρ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ΅ΡΡ(Ρ) ΠΏΡΠΎΡΠ΅Π»(ΠΈ):
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ ΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΠ΅Π½ ΠΈ ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΡ Π½Π° GitHub.
ΠΠΎΠΉΠ΄ΠΈΡΠ΅ Π² ΡΠ²ΠΎΡ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Heroku.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π² ΠΏΡΠ°Π²ΡΠΉ Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ³ΠΎΠ» ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° New.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Create new app (Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅).
ΠΠΎΠ±Π°Π²ΡΡΠ΅ App name (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ) ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ Π²ΡΠ±ΠΎΡΡ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½ (Choose a region), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Create app).
ΠΠ΅ΡΠ½ΠΈΡΠ΅ΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π» Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ login (Π²ΠΎΠΉΠ΄ΠΈΡΠ΅) Π² Heroku Ρ ΠΏΠΎΠΌΠΎΡΡΡ Heroku CLI. ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ Heroku CLI, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΡΡ ΡΡΠ°ΡΡΡ.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ remote Π² Π²Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
ΠΠ°ΡΠ΅ΠΌ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΆΠ°ΡΡ open app (ΠΎΡΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) Π½Π° ΠΏΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Heroku, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΡΠΊΡΠΎΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡΠ΅ Π½Π° ΡΠ²ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ΄ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ non-root.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ΄ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ java runtime:
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ΄Π½Ρ Π·Π° Π΄ΡΡΠ³ΠΎΠΉ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Jenkins.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Jenkins ΠΈ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ½ΡΡΠ°Π»Π»ΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° Jenkins, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ active:
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Jenkins Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° ΠΏΠΎΡΡΡ 8080, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΡΠΊΡΠΎΠ΅ΠΌ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ufw:
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ufw Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ°ΠΉΡ http://ip_address:8080 Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Jenkins, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΊΡΠ°Π½ Unlock Jenkins.
Π§ΡΠΎΠ±Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Jenkins, Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠΎΠ»Ρ. Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ Π΅Π³ΠΎ Π² ΠΏΠΎΠ»Π΅ Administrator password (ΠΠ°ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°).
ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΊΡΠ°Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Customize Jenkins (ΠΠ°ΡΡΡΠΎΠΈΡΡ Jenkins), Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° Install suggested plugins (Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ).
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠΊΡΠ°Π½Ρ Create First Admin User (Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°). ΠΠ²Π΅Π΄ΠΈΡΠ΅ Username (ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ), Password (ΠΏΠ°ΡΠΎΠ»Ρ), Full name (ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ) ΠΈ E-mail address (Π°Π΄ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ) Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π·Π°ΡΠ΅ΠΌ Save and Continue (Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ).
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Π²Π΅Π΄ΠΈΡΠ΅ IP-Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, Ρ.Π΅. http://ip_address:8080, Π·Π°ΡΠ΅ΠΌ Save and Finish (Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈ ΠΠ°Π²Π΅ΡΡΠΈΡΡ).
Π£ΡΠ°, Jenkins Π³ΠΎΡΠΎΠ²! ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° Start using Jenkins (ΠΠ°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Jenkins).
Π ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ GitHub ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Settings (ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ), Π·Π°ΡΠ΅ΠΌ Π½Π° Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° Webhooks. ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° Add webhooks (ΠΠΎΠ±Π°Π²ΠΈΡΡ Π²Π΅Π±-Ρ ΡΠΊΠΈ) ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ url Jenkins Ρ ΠΏΡΠΈΡΡΠ°Π²ΠΊΠΎΠΉ /github-webhook/ Π² ΠΏΠΎΠ»Π΅ Payload URL.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ application/json Π΄Π»Ρ Content-type.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Just the push event Π΄Π»Ρ ΡΠΎΠ±ΡΡΠΈΡ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡΠ΅Π³ΠΎ Π²Π΅Π±-Ρ ΡΠΊ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»Π°ΠΆΠΎΠΊ Active ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Add webhook. Π’Π΅ΠΏΠ΅ΡΡ GitHub ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π² Jenkins.
ΠΡΠΊΡΠΎΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ Π²ΠΊΠ»Π°Π΄ΠΊΡ ΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡΠ΅ Π½Π° ΡΠ²ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ non-root.
Π ΡΠΎΠΌ ΠΆΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ root, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ root ΠΈ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ npm, Jenkins Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π½Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»ΡΡ SSH Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ Enter Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΠΉΡΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅, ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ Enter.
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΠΉΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠΊΡΡΡΠΎΠΌ ΠΊΠ»ΡΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ non-root Π² Π½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅.
ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ authorized_keys ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
ΠΡΡΠ°Π²ΡΡΠ΅ ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡ id_rsa ΠΈ Π²ΡΠΉΠ΄ΠΈΡΠ΅.
Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠ»ΡΡΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΡΠ΅ΡΠ²Π΅ΡΠ° jenkins ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²ΠΎΠΉΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ non-root, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ssh. ΠΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΠΎΠΉΠ΄Π΅ΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΡ, Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌ Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ.
ΠΠ° ΠΏΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Jenkins ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π» Manage jenkins (Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ jenkins), Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° Manage plugins (Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ).
ΠΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Available Π½Π°ΠΉΠ΄ΠΈΡΠ΅ github ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Github Integration plugin (ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Github).
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° Install without restart (Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ), ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° GitHub ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΊ Jenkins, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ° Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° New Item (ΠΠΎΠ²Π°Ρ ΡΠ΅ΠΌΠ°), Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Freestyle project ΠΈΠ· ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ OK.
ΠΠ°Π»Π΅Π΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ Π΅Π΅, Π½Π°ΠΆΠ°Π² Configure Π½Π° Π»Π΅Π²ΠΎΠΉ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΊΡΡΡΠΈΡΠ΅ Π²Π½ΠΈΠ· Π΄ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° Source Code Management (Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ), Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Git ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Repository URL Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .git (ΡΠΎΡ ΠΆΠ΅ url, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π»Ρ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ).
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ master Π²Π΅ΡΠ²Ρ Π½Π° main ΠΈΠ»ΠΈ Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΠ²ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Add repository (ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ), ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Heroku.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Heroku, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² App settings (Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ) Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Heroku ΠΈ ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΡΡΠ»ΠΊΡ.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ΡΡ Π½Π° ΠΏΡΠΈΠ±ΠΎΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ Jenkins ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ ΡΡΡ ΡΡΡΠ»ΠΊΡ Π² Repository URL.
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° Add, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Heroku.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Jenkins ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°, ΠΈ Ρ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ.
ΠΠ²Π΅Π΄ΠΈΡΠ΅ username (ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ) ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ Π²ΡΠ±ΠΎΡΡ, Π½ΠΎ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ. Π― Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ heroku Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Heroku Api key (Api-ΠΊΠ»ΡΡ) Π² ΠΏΠΎΠ»Π΅ Password
(ΠΠ°ΡΠΎΠ»Ρ) ΠΈ Save (Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ). Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Heroku Api key, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ±ΠΎΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ Heroku, Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° Account Settings (ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°) ΠΈ ΠΏΡΠΎΠΊΡΡΡΠΈΡΠ΅ Π²Π½ΠΈΠ·, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Api key. Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ Π² ΠΏΠΎΠ»Π΅ Password (ΠΠ°ΡΠΎΠ»Ρ).
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Description (ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅) Π΄Π»Ρ ΡΡΠΎΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Add (ΠΠΎΠ±Π°Π²ΠΈΡΡ), ΡΡΠΎΠ±Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π²ΡΠ±ΡΠ°Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ. ΠΡΠ»ΠΈ Π½Π΅Ρ, Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° Π²ΡΠΏΠ°Π΄Π°ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΈΡ .
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° advanced ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Name, ΡΡΠΎΠ±Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ. ΠΡΠΎ ΠΈΠΌΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΠΌ ΠΏΠΎΠ·ΠΆΠ΅. Π― Π½Π°Π·Π²Π°Π» ΡΠ²ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ jenkinsTest, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΊΡΡΡΠΈΡΠ΅ Π²Π½ΠΈΠ· Π΄ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° Build Triggers ΠΈ ΠΎΡΠΌΠ΅ΡΡΡΠ΅ ΠΎΠΏΡΠΈΡ GitHub hook trigger for GITScm polling (Π’ΡΠΈΠ³Π³Π΅Ρ Ρ ΡΠΊΠ° GitHub Π΄Π»Ρ ΠΎΠΏΡΠΎΡΠ° GITScm).
Π ΡΠ°Π·Π΄Π΅Π»Π΅ Build Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Add build step (ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°Π³ ΡΠ±ΠΎΡΠΊΠΈ) ΠΈ Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° Execute shell (ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ). ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° Add post-build action (ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ), Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Git Publisher ΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎΠΏΡΠΈΡ Push Only If Build Succeeds (ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΡΠ±ΠΎΡΠΊΠΈ).
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° Add Branch (ΠΠΎΠ±Π°Π²ΠΈΡΡ Π²Π΅ΡΠ²Ρ), Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΡ Π²Π΅ΡΠ²ΠΈ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π² ΠΏΠΎΠ»Π΅ Branch to Push ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Name, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Heroku, Π² ΠΏΠΎΠ»Π΅ Target remote name (ΠΌΠΎΠ΅ ΠΈΠΌΡ Π±ΡΠ»ΠΎ jenkinsTest, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΠ΄Π° ΡΠ²ΠΎΠ΅).
ΠΠ°ΡΠ΅ΠΌ Save (ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅).
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ±ΠΎΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π½Π°ΠΆΠΌΠΈΡΠ΅ Build now (ΠΠΎΡΡΡΠΎΠΈΡΡ ΡΠ΅ΠΉΡΠ°Ρ) Π½Π° Π»Π΅Π²ΠΎΠΉ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈ Ρ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ΠΌ Π½Π°Π±Π»ΡΠ΄Π°ΠΉΡΠ΅ Π·Π° ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°!
ΠΠ½Π΅ΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ Π΅Π³ΠΎ Π½Π° GitHub. ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊ Π²Π°Ρ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡ Π½Π° Heroku.
ΠΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ Π²ΡΠ΅Ρ ΠΆΠ΅Π»Π°ΡΡΠΈΡ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΡΡΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΊΠ°ΡΠ°ΡΡΡΡ Π² JavaScript-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅: