ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅
ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ (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-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅:
ΠΠ’ ΠΠ°Π·Π° Π·Π½Π°Π½ΠΈΠΉ
ΠΠΎΠ»Π΅Π·Π½ΠΎ
β ΠΠ½Π»Π°ΠΉΠ½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ
β ΠΠ½Π»Π°ΠΉΠ½ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠ΅ΠΉ
β Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° FreePBX Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅
β Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Cisco UCM/CME Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅
β Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΏΠΎ Linux/Unix
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ
Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ
Π’Π΅Π»Π΅ΡΠΎΠ½ΠΈΡ
FreePBX ΠΈ Asterisk
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΎΠ²
ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΡΠ΅ΡΠΈ
ΠΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΡ
Π Π°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ Ρ Jenkins. Π§ΡΠΎ ΡΡΠΎ?
Π΄Π²ΠΎΡΠ΅ΡΠΊΠΈΠΉ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
Π‘Π΅Π³ΠΎΠ΄Π½Ρ (Π΄Π° ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ) ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΠΈ Π³Π°Π΄ΠΆΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ, ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π±Π΅Π· Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. Π ΡΡΡ ΠΏΠΎΠ½Π΅ΡΠ»Π°ΡΡ 🤯
ΠΠ½Π»Π°ΠΉΠ½ ΠΊΡΡΡ ΠΏΠΎ Linux
ΠΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠ°Ρ ΡΠ°ΠΌΡΡ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π½ΡΡ Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠ΅Π±Π΅ Π½Π°ΡΠ°ΡΡ ΠΊΠ°ΡΡΠ΅ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Linux, ΡΠ°ΡΡΠΈΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ Π·Π½Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ ΡΠ°Π³ ΠΊ DevOps
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ (ΠΠ) ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ². ΠΠΎ ΠΊΠ°ΠΊ.
ΠΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π²ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠ³ΡΡ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. ΠΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ Π³Π°Π΄ΠΆΠ΅ΡΡ, ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π²ΡΠΊΠΎΠ²ΡΠ΅ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ, Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΄Ρ, ΠΏΡΠΈΠ½ΡΠ΅ΡΡ, ΠΈ ΠΏΡΠΎΡΠΈΠ΅. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π΄Π°Π½Π½ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π΅ ΡΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΡΡΠ°ΡΠ΅Π²Π°Π΅Ρ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ ΡΡΠ°Π²ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΡΡΠ°, Π½ΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΊΡΠΎΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π±ΡΡΡ, ΠΈ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠΏΡΡΠ΅Π½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ ΡΠΎΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π·Π°ΠΏΡΡΡΠΈΡΡΡ, Π»ΠΈΠ±ΠΎ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΠΈ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ. ΠΠ° ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΡΠΊΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎ ΠΆ**Π΅ ΠΎΡ Π’ΠΈΠΌΠ»ΠΈΠ΄Π°.
Jenkins ΡΠΈΡΡΠ΅ΠΌΠ° Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΡΠ°ΡΠΈ ΡΠΎΠ·Π΄Π°Π½ Π½Π° Π±Π°Π·Π΅ Java. ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, Π±Π΅Π· ΡΡΠ°ΡΡΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. ΠΠ°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎΡ Π²ΠΎΡ.
ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ (Continuous Integration, CI) ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠΌΡΡΠ» ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΠΈΡ ΠΊΠΎΠΏΠΈΠΉ Π² ΠΎΠ±ΡΡΡ Π»ΠΈΠ½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½Π²Π΅Π΅Ρ.
ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π΄ΡΠ°ΡΡΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΠΉ (ΡΠ΅ΡΠ½ΠΎΠ²ΠΈΠΊΠΎΠ²) ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΠΉ, Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Jenkins ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² Π»ΡΠ±ΠΎΠΉ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π³Π΄Π΅ Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½ΡΠ΅ (ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° Π·Π°Π΄Π°Ρ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π²ΠΎΠΎΠ±ΡΠ΅. Π‘ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ «deploy» ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ «ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅«. Π ΡΡΠΎ ΡΠ΅Π»ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ Π³ΠΎΡΠΎΠ²ΡΠΌ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΡΡΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΊΠ°ΠΆΡΡ: «ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ΅Π½ Jenkins, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ Buildbot?». Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΎΡΠ²Π΅ΡΠΎΡΠΊΠ°.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ»ΡΡΡ ΠΈ ΠΎΡΠ»ΠΈΡΠΈΡ Jenkins Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΡΠ½ΡΠΉ, ΡΡΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ, Π»ΠΈΠ±ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΠΎΠΏΡΡΠ° Π² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. Π ΡΠ΄Π΅Π»Π°Π΅Ρ ΠΎΠ½ ΡΡΠΎ Π·Π° ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΡΠΎΠΊ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π² Buildbot, Π½ΠΎ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ Π² Π½ΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ.
ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, Jenkins ΡΡΡΡΠ°Π½ΠΈΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², Π±Π΅Π· ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. Jenkins ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠΌ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ.
ΠΠ»Π°Π³ΠΈΠ½ ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ Π±Π»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π° ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ Jenkins ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ.
Jenkins ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΎΡΠΈΠ»ΠΈΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ Π±ΡΠΊΠ³ΡΠ°ΡΠ½Π΄ΠΎΠΌ (ΠΎΠΏΡΡΠΎΠΌ) Π² IT, Π²ΡΠ΅Π³ΠΎ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΎΠ².
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Jenkins:
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° YouTube ΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. Π£Π²Π΅ΡΠ΅Π½Ρ, Π²Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΏΠΎΠΆΠ°Π»Π΅Π΅ΡΠ΅. ΠΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΡΠ½ΠΎ.
ΠΠ½Π»Π°ΠΉΠ½ ΠΊΡΡΡ ΠΏΠΎ Linux
ΠΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠ°Ρ ΡΠ°ΠΌΡΡ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π½ΡΡ Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠ΅Π±Π΅ Π½Π°ΡΠ°ΡΡ ΠΊΠ°ΡΡΠ΅ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Linux, ΡΠ°ΡΡΠΈΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ Π·Π½Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ ΡΠ°Π³ ΠΊ DevOps
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ Π² Jenkins
Jenkins ΡΠ΅ΠΉΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π³Π΄Π΅ Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° Π·Π°Π΄Π°Ρ.
ΠΠ° ΡΡΠ½ΠΊΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² (ΠΊΠ°ΠΊ ΠΏΠ»Π°ΡΠ½ΡΡ , ΡΠ°ΠΊ ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΊΠΎΠΌΡΠΎΡΡΠ½ΠΎ.
Jenkins ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠΌ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ.
ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π½Π°ΠΌ ΡΠ΅ΡΠ΅Π· Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°ΠΌΠΎΠ³ΠΎ Jenkins, Π³Π΄Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π·Π°Π΄Π°Ρ ΠΈ ΠΈΡ ΡΠ°Π·Π½ΠΎΡΠΈΠΏΠ½ΠΎΡΡΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
ΠΠΈΠΆΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ Π² Jenkins.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
Jenkins job builder
ΠΡΠΎ python-ΡΡΠΈΠ»ΠΈΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΠΈ Π² YAML- ΠΈΠ»ΠΈ JSON ΡΠΎΡΠΌΠ°ΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΠ΅Π· HTTP API Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
DSL Plugin
ΠΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ Jenkins, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ (DSL, Domain Specific Language) ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Jenkins-ΡΠ΅ΡΠ²Π΅ΡΠ΅.
Jenkins Pipeline
ΠΡΠΎ ΡΠΈΠΏ Π·Π°Π΄Π°ΡΠΈ Π² Jenkins, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π½Π°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΈΠ»ΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠ°Π΄ΠΈΡΠΌ. ΠΠΏΠΈΡΡΠ²Π°ΡΡ pipeline ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ Jenkinsfile, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Gitlab ΠΈ Gitlab CI
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠΈΠΉΡΡ ΡΠ΅ΠΉΡΠ°Ρ selfhosted ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡ . ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΈ ΡΠ½ΡΠ΅ΡΠΏΡΠ°ΠΉΠ·-ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ½ΡΡΡΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ CI, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Go, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ Π°Π³Π΅Π½ΡΡ (runners) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ°Π΄ΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ.
ΠΡΠ°ΠΊ, Π½Π°ΡΠ½Π΅ΠΌ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. Jenkins-job-builder Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠ°ΠΊ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠ°ΠΊ ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½Ρ, Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°Π³Π΅Π½Ρ gitlab. ΠΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΏΡΠΎΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ gitlab.
ΠΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π½Π° linux ΠΈ mac ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π²Π΅ΡΡΠΈΡ:
ΠΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ seed job ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ.
ΠΠΎΠ±Π°Π²Π»Ρ, ΡΡΠΎ seed job Π² ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ DSL Plugin ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΠ° ΡΠΈΠΏΠ° Free-style project, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈΠ· DSL-ΡΠΊΡΠΈΠΏΡΠΎΠ².
ΠΠ° gitlab-ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±ΡΠ΄Π΅Ρ Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π° linux-ΠΌΠ°ΡΠΈΠ½Ρ:
ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΡΠΈΠ»ΠΈΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π°
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΏΠ»Π°Π³ΠΈΠ½ Π² Jenkins. ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ UpdateCenter Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Manage Jenkins β Manage Plugins β Available, ΡΠ°ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ curl/wget, ΡΠΊΠ°ΡΠ°Π² ΠΏΠ»Π°Π³ΠΈΠ½ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°:
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΠΎΠ΄ ΠΊΠΎΠ΄ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ Π½Π°Ρ seed job β ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²:
jenkins.ini
job-generator.yml
.gitlab-ci.yml
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ gitlab-runner ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ gitlab ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Jobs Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΡΡ ΡΡ Π΅ΠΌΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΅Π³ΠΎ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ repo-dsl ΠΈ ΠΏΠ»ΠΎΡΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ. ΠΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ.
ΠΠΎΠ»ΠΎΠΆΠΈΠΌ Π² Π½Π΅Π³ΠΎ ΡΠ°ΠΉΠ» Ρ Π½Π°ΡΠΈΠΌ pipeline:
Π Π½Π°ΡΡΡΠΎΠΈΠΌ webhook ΠΏΠΎ Π·Π°ΠΏΡΡΠΊΡ seed-job, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅.
Π Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ gitlab webhooks ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Settings β Integrations.
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ webhook Π½Π° push (http://gitlab:pass@ci.org/project/job-generator). Π‘Ρ
Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ Π² Π½Π°ΡΠ΅ΠΌ Jenkins Π΅ΡΡΡ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ:
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ sample-project ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Jenkinsfile ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ:
Π ΠΈΡΠΎΠ³Π΅ Π³ΠΎΡΠΎΠ²ΡΠΉ pipeline Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ blueocean Π² Jenkins:
ΠΠ»ΠΈ ΡΠ°ΠΊ Π² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅:
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ webhook Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Ρ docker-image, Π³Π΄Π΅ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΡΠ° Π·Π°Π΄Π°ΡΠ°.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΎΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ Π² jenkins. ΠΠ° ΡΡΠ΅Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· Π²Π°ΡΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.