Π§ΡΠ΄Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π½Π°ΡΠ° Π½Π° CI ΡΡΠ΅Π΄Π°ΡΠ° Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΅ΡΠΈΠΌΠ΅ΡΠ΅Π½ Jenkins Π°Π³Π΅Π½Ρ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Kubernetes pod, Ρ ΠΌ. Π‘Π°ΠΌΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, Π°Π³Π΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ ΡΠ΅ Π·Π°Π²ΡΡΡΠ°Ρ. Π£ΠΌΠ΅Π½, ΡΠΎΠ²Π° Π΅!
ΠΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΡ ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ Jenkins Π½Π° Kubernetes. Π ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅, Π²ΠΈΠΆΡΠ΅ Π³ΠΎ ΡΡΠΊ πΠ Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° jenkins Π² Kubernetes
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ Jenkins Agent Π² Kubernetes?
ΠΠ°ΡΠΎ Π°Π³Π΅Π½ΡΡΡ ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ ΡΠ΅ ΠΏΡΠΈΡΡΠ΅Π΄ΠΈΠ½ΠΈ ΠΊΡΠΌ Kubernetes pod?
ΠΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ° ΡΠ²ΠΎΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½Π° ΠΊΠ°ΡΠΈΠ΅ΡΠ° Ρ ΠΌΠ°Π»ΠΊΠΎ Ρ ΡΠΌΠΎΡ! π
Π₯ΡΠΌΠΎΡΡΡ Π½Π°ΡΡΡΠ°Π½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° jenkin agent K8.
- ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° Jenkins, ΠΏΠ»ΡΠ³ΠΈΠ½ΡΡ Jenkins Kubernetes ΠΏΡΠ°Π²ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° API ΠΊΡΠΌ Kubernetes, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ K8 agent pod.
- Π‘ Π½ΡΠΊΠΎΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠ±ΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎΠ΄ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° jenkin agent pod.
- ΠΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠ΄ΡΡ Π½Π° Π°Π³Π΅Π½ΡΠ° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ, ΡΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°, Π·Π° Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ Ρ Π³Π»Π°Π²Π½ΠΈΡ Jenkins, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π½Π΅ΡΠΎ, Π½Π°ΡΠ΅ΡΠ΅Π½ΠΎ jnlp (Java Network Launch Protocol ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ Jenkins Π·Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π°Π³Π΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅)
Π‘Π΅Π³Π° ΡΠΏΠΎΡΠ΅Π΄ Jenkinsfile, Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠΏΠΊΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π° ΡΠΎΠ·ΠΈ Π°Π³Π΅Π½Ρ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π±ΡΠ΄Π΅ Π³ΠΎΡΠΎΠ²ΠΎ, Π³ΡΡΠΏΠ°ΡΠ° ΡΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ, Π½ΠΎ ΠΈΠΌΠ° ΠΎΠΏΡΠΈΡ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΡΡΠ·Π΄Π°Π΄Π΅Π½ Π°Π³Π΅Π½Ρ Π½Π° Π³ΡΡΠΏΠ°.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π΄ΠΎΠΊΠ°ΡΠΎ k8 ΠΊΠ»ΡΡΡΠ΅ΡΡΡ ΡΠ΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°ΡΠ΅ Jenkins build agents Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΡΠ² ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠΎ ΠΏΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΏΡΠΈΡΡΠ°Π²ΠΊΠ°ΡΠ° Kubernetes Π½Π° Jenkins. ΠΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ!
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½ Π½Π° Jenkins Kubernetes
ΠΠ° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ»ΡΠ³ΠΈΠ½Π° jenkins kubernetes:
- ΠΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Jenkins β Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ
2. ΠΏΠΎΡΡΡΡΠ΅ΡΠ΅ ΠΏΠ»ΡΠ³ΠΈΠ½Π° kubernetes Π² Π½Π°Π»ΠΈΡΠ½ΠΈΡ ΡΠ°Π·Π΄Π΅Π» ΠΈ Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅. ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅ Π² Π³ΠΎΡΠ½Π°ΡΠ° ΡΠ½ΠΈΠΌΠΊΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠΌ Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π».
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΎΠ±Π»Π°ΠΊ kubernetes ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ:
- Π‘Π»Π΅Π΄ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π½Π°
Manage Jenkins
ββΊManage Node & Clouds
2. Π©ΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π»Π°ΡΠΈ
3. βΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ² ΠΎΠ±Π»Π°ΠΊβ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Kubernetes.
4. ΠΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° Kubernetes Cloud
ΠΠ° Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΎΠ±Π»Π°ΠΊΠ° kubernetes Π½Π° jenkins
Π’ΡΠΊ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π° ΡΠ»ΡΡΠ°Ρ
- Π‘ΡΡΠ²ΡΡ Π½Π° Jenkins (Π³Π»Π°Π²Π΅Π½), ΡΠ°Π±ΠΎΡΠ΅Ρ Π² ΡΡΡΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Kubernetes
- Π‘ΡΡΠ²ΡΡΡΡ Π½Π° Jenkins (Π³Π»Π°Π²Π½ΠΈΡΡ) ΡΠ΅ ΠΈΠ·ΡΠ΅ΡΠΏΠ²Π° ΠΎΡ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes.
ΠΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡΡΠ²ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ
Π‘ΡΡΠ²ΡΡ Π½Π° Jenkins, ΡΠ°Π±ΠΎΡΠ΅Ρ Π² ΡΡΡΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Kubernetes
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Jenkins Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° Kubernetes ΡΡΡ ΡΠ΅ΡΠ²ΠΈΠ·Π΅Π½ Π°ΠΊΠ°ΡΠ½Ρ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π½Π° Π°Π³Π΅Π½ΡΠ°, Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠΏΠΎΠΌΠ΅Π½Π°Π²Π°ΠΌΠ΅ URL Π°Π΄ΡΠ΅ΡΠ° Π½Π° Kubernetes ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠ° Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π·Π° Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π°ΠΊΠ°ΡΠ½ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π±ΡΡΠΎΠ½Π° Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. Π’ΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π°ΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ Jenkins ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ API Π½Π° Kubernetes.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°:ΡΡΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π° kubernates ΠΊΠ°ΡΠΎ jenkins (ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·Π³ΡΡΠ½Π°ΡΠ° Π³ΡΡΠΏΠ°ΡΠ° Π½Π° jenkins agent). ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠΎΠ·ΠΈ, Π² ΠΊΠΎΠΉΡΠΎ Π΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Jenkin ΡΡΡΠ²ΡΡ (Π³Π»Π°Π²Π΅Π½).
ΠΠ΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΡΡΠ΅Π½Π°ΡΠΈΡ, Π² ΠΊΠΎΠΉΡΠΎ jenkins ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ kubernetes ΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΠΈ ΠΈΠ·Π²ΡΠ½ (Π½ΡΠΊΡΠ΄Π΅ Π΄ΡΡΠ³Π°Π΄Π΅) ΠΊΠ»ΡΡΡΠ΅ΡΠ° kubernetes.
Π‘ΡΡΠ²ΡΡ Π½Π° Jenkins, ΡΠ°Π±ΠΎΡΠ΅Ρ ΠΈΠ·Π²ΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes
ΠΠΊΠΎ Π²Π°ΡΠΈΡΡ Jenkins ΡΡΡΠ²ΡΡ ΡΠ°Π±ΠΎΡΠΈ ΠΈΠ·Π²ΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ.
- URL Π°Π΄ΡΠ΅Ρ Π½Π° Kubernetes: Π’ΠΎΠ²Π° Π΅ ΠΊΡΠ°ΠΉΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Kubernete master API. ΠΠΊΠΎ https Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ https url.
- ΠΠ»ΡΡ Π½Π° Kubernete Server Certificate:ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Kubernetes Cluster CA ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π·Π° Π·Π°ΡΠΈΡΠ΅Π½Π° Π²ΡΡΠ·ΠΊΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΎΡ Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ΅Ρ pod, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ Π°ΠΊΠ°ΡΠ½Ρ Π·Π° ΡΡΠ»ΡΠ³Π°
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
. ΠΠΊΠΎ Π½ΡΠΌΠ°ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° βdisable https certificate check
β. ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² /etc/kubernetes/pki/ Π² Π³Π»Π°Π²Π½ΠΈΡ Π²ΡΠ·Π΅Π» - ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ: ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ° Ρ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° Kubernetes, ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ ΡΠΎΠΊΠ΅Π½ Π½Π° Π°ΠΊΠ°ΡΠ½Ρ Π·Π° ΡΡΠ»ΡΠ³Π° Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°
devops-tools
.
ΠΠ΅ΡΠ΅ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΡΠ΅ΡΠ²ΠΈΠ·Π½ΠΈΡ Π°ΠΊΠ°ΡΠ½Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° βjenkinsβ. Π’ΡΡΠ±Π²Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΡΠΎΠΊΠ΅Π½Π° ΠΎΡ Π°ΠΊΠ°ΡΠ½ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°.
ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ ΡΠ°ΠΉΠ½ΠΎΡΠΎ ΠΈΠΌΠ΅ ΠΎΡ Π°ΠΊΠ°ΡΠ½ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°.
SECRET_NAME=$(kubectl get serviceaccount jenkins-admin -o=jsonpath='{.secrets[0].name}' -n jenkins)
Π‘Π΅Π³Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ SECRET_NAME, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΎΠΊΠ΅Π½Π° Π½Π° Π°ΠΊΠ°ΡΠ½ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΊΠΎΠ΄ΠΈΡΠ°Π½ Π² base64, ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° Π³ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΠΌΠ΅. Π©Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½Π° ΠΊΠ°ΡΠΎ ΠΈΠ·Ρ ΠΎΠ΄.
kubectl get secrets $SECRET_NAME -o=jsonpath='{.data.token}' -n devops-tools | base64 -D
Π‘Π΅Π³Π° ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ
Ρ Π±ΡΡΠΎΠ½Π° Add
ΠΏΠΎΠ΄ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΈΠΏ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ βSecret text
β. ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠΎΠΊΠ΅Π½Π° Π½Π° Π°ΠΊΠ°ΡΠ½ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π² ΡΠ°ΠΉΠ½ΠΎΡΠΎ ΠΏΠΎΠ»Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. ΠΠ°ΠΊΡΠ°Ρ Π·Π°ΠΏΠ°Π·Π΅ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ.
ΠΠ±Π»Π°ΡΠ½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Kubernetes ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°.
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΠΎΠΏΡΠ»Π½ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ΡΡΠ²Π°ΡΠ΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ°, Π·Π° Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ Π·Π° URL Π°Π΄ΡΠ΅ΡΠ° Π½Π° Jenkins ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ:
ΠΠ° Π³Π»Π°Π²Π½ΠΈΡ Jenkins, ΡΠ°Π±ΠΎΡΠ΅Ρ Π²ΡΡΡΠ΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΡΠ°ΠΉΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes ΠΊΠ°ΡΠΎ URL Π°Π΄ΡΠ΅Ρ Π½Π° Jenkins, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π½Π° Π°Π³Π΅Π½ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Ρ ΠΊΡΠΌ ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΡΡΠ΅Π· DNS Π½Π° Π²ΡΡΡΠ΅ΡΠ½Π° ΡΡΠ»ΡΠ³Π°.
URL Π°Π΄ΡΠ΅ΡΡΡ ΡΠ΅ ΠΈΠ·Π²Π»ΠΈΡΠ° ΡΡΠ΅Π· ΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ.
http://<service-name>.<namespace>.svc.cluster.local:8080
Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠ»ΡΠ³Π°ΡΠ° DNS ΡΠ΅ Π±ΡΠ΄Π΅,
http://jenkins-service.jenkins.svc.cluster.local:8080
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠ° POD, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ°Π±Π»Π° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°:ΠΠΊΠΎ Π³Π»Π°Π²Π½ΠΈΡΡ Jenkins Π΅ ΠΈΠ·Π²ΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° Kubernetes, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ IP ΠΈΠ»ΠΈ DNS Π½Π° JenkinsΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° URL Π½Π° Jenkins.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° POD ΠΈ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ:
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ POD ΡΠ°Π±Π»ΠΎΠ½Π° Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. ΠΡΠΈΠΊΠ΅ΡΡΡ kubeagent
ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² Π·Π°Π΄Π°Π½ΠΈΠ΅ΡΠΎ ΠΊΠ°ΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΡΠ°Π·ΠΈ Π³ΡΡΠΏΠ° ΠΊΠ°ΡΠΎ Π°Π³Π΅Π½Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker.
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΅ ΡΠ°Π±Π»ΠΎΠ½ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠΊΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΏΠ»ΡΠ³ΠΈΠ½ΡΡ Jenkins Kubernetes ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° JNLP ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΎΡ Docker hub, Π·Π° Π΄Π° Π·Π°Π²ΡΡΡΠΈ Π°Π³Π΅Π½ΡΠΈΡΠ΅. Ρ.Π΅. jenkins/inbound-agent
Π£Π²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ sleep
ΠΈ 9999999
ΠΎΡ ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΊΡΠΌ POD ΡΠ°Π±Π»ΠΎΠ½Π° ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°. ΠΠ±ΡΡΠ½ΠΈΡ
ΡΠΎΠ²Π° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π» Ρ Jenkinsfile
ΠΏΡΠΈΠΌΠ΅ΡΠ°.
Π’ΠΎΠ²Π° Π΅ Π±Π°Π·ΠΎΠ²Π°ΡΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° Π°Π³Π΅Π½ΡΠ°. Π©Π΅ ΠΎΠ±ΡΡΠ½Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ.
Π‘Π΅Π³Π° Π·Π°ΠΏΠ°Π·Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ Π½Π΅ΠΊΠ° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠΎΠ΄ Π°Π³Π΅Π½Ρ.
Π’Π΅ΡΡΠ²Π°ΠΉΡΠ΅ Π°Π³Π΅Π½ΡΠ° Ρ Freestyle Project:
Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π»ΡΠΆΠ½ΠΎΡΡΡΠ° Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠ° buildagent
, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. Π’ΠΎΠ²Π° Π΅ Π΅ΡΠΈΠΊΠ΅ΡΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡ
ΠΌΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° pod. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ Π·Π½Π°Π΅ ΠΊΠΎΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° pod Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° Π°Π³Π΅Π½ΡΠ°.
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΡΡΠΏΠΊΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° echo, Π·Π° Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ΡΠΎ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
Π‘Π΅Π³Π° Π·Π°ΠΏΠ°Π·Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π·Π°Π΄Π°Π½ΠΈΠ΅ΡΠΎ ΠΈ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ βΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΡΠ΅Π³Π°β
Π’ΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ°ΠΊΠ°Ρ Π°Π³Π΅Π½Ρ Π² Ρ ΡΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π΄Π°Π½ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
Π‘Π»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΏΠ΅ΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. ΠΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠΎΠΉ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π°ΡΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°.
Jenkinsfile Ρ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° Pod
ΠΠ°ΠΊΠ²ΠΎΡΠΎ ΠΈ Π΄Π° ΡΠΌΠ΅ Π²ΠΈΠΆΠ΄Π°Π»ΠΈ Π΄ΠΎΡΠ΅Π³Π°, Π΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΈ ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΈΡΡΠ°Π²ΠΊΠ°ΡΠ° kubernetes jenkins.
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ POD ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ Π² Jenkinsfile.
ΠΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π½Π°Π΅ΡΠ΅ Π·Π° POD ΡΠ°Π±Π»ΠΎΠ½Π°.
- ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° JNLP ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΏΡΠΈΡΡΠ°Π²ΠΊΠ°ΡΠ° Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ° Π½Π° jenkins. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ JNLP ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠ΅ Π΄Π°Π΄Π΅ΡΠ΅ ΠΈΠΌΠ΅ΡΠΎ jnlp Π² ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π² Π΅Π΄ΠΈΠ½ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° ΠΏΠΎΠ΄. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π°.
- POD_LABEL ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π΅ΡΠΈΠΊΠ΅Ρ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΊΡΠΌ Π³ΡΡΠΏΠ°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°. ΠΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π°Π²Π°ΡΠ΅ Π΄ΡΡΠ³ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΎΡΠ²Π΅Π½ POD_LABEL.
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ Jenkinfile Ρ POD ΡΠ°Π±Π»ΠΎΠ½.
podTemplate{ node(POD_LABEL){ stage('Run shell'){ sh 'echo hellow world' } } }
ΠΠΊΠΎ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ Π³ΠΎΡΠ½ΠΈΡ Jenkinsfile Π² Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° pipleline, ΡΠΎΠΉ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° JNLP ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π² Π΅ΡΠ°ΠΏΠ° βRun Shellβ. ΠΠΎΠ³Π°ΡΠΎ ΠΊΠ°Π·Π²Π°ΠΌ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, JNLP ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ Π΄ΠΎΠΊΠ΅Ρ Ρ ΡΠ±Π° ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΏΠ»ΡΠ³ΠΈΠ½Π°, Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΡΠ°ΠΊΡΠ².
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π½Π°ΡΠ΅ΡΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ jnlp ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΊΠ°ΠΊΡΠΎ Π΅ Π΄Π°Π΄Π΅Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
podTemplate( containers: [ containerTemplate( name: "jnlp", image: "jenkins/inbound-agent:latest" ) ]) { node(POD_LABEL){ stage('Get a Maven project'){ container('jnlp'){ stage('Shell Execution'){ sh ''' echo "Hello world" ''' } } } } }
Π¨Π°Π±Π»ΠΎΠ½ Π·Π° ΠΏΠΎΠ΄ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π² Π΅Π΄ΠΈΠ½ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° POD.
ΠΡΠΎ Π΅Π΄ΠΈΠ½ ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°.
ΠΠ° ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ, ΡΠ΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΠΊΠ°ΠΊΡΠΎ java, ΡΠ°ΠΊΠ° ΠΈ python ΠΏΡΠΎΠ΅ΠΊΡ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΄Π²Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π² Π΅ΡΠ°ΠΏΠΈΡΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ, Π² Π΄Π²Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π΅ΡΠ°ΠΏΠ°, Π½ΠΈΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° pod.
ΠΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΡΠ΄ΡΡΠΆΠ° Π²ΡΠΈΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π° maven Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° java, Π° Π΄ΡΡΠ³ ΡΡΠ΄ΡΡΠΆΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° python.
podTemplate( containers: [ containerTemplate( name: "maven", image: "maven:3.8.1-jdk-8", command: 'sleep', args: '30d' ), containerTemplate( name: "python", image: "python:latest", command: "sleep", args: "30d" ) ]) { node(POD_LABEL){ stage("Get a maven project"){ git: "https://github.com/spring-projects/spring-petclinic.git" container("maven"){ stage("Build a Maven project"){ sh ''' echo "maven build" ''' } } } stage('Get a python project'){ git url: 'https://github.com/hashicorp/terraform.git', branch: 'main' container('python'){ stage('Build a go project'){ sh ''' echo "Go Build" ''' } } } } }
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π³ΠΎΡΠ½ΠΈΡ Jenkinsfile, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ.
ΠΠΎΠΊΠ°ΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΡΠ΅ Π³ΠΎΡΠ½ΠΈΡ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄, Π°ΠΊΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΎΡΠΌΠ΅ΡΠΊΠ° Π½Π° kubernetes pods, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π² build agent pod.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° Docker hub ΠΏΠΎΡΠ°Π΄ΠΈ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π² ΡΠ΅Π°Π»Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. Π’Π°ΠΊΠ° ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ Docker ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π΄Π° Π³ΠΈ Ρ ΠΎΡΡΠ²Π°ΡΠ΅ Π² ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈ ΡΠΎΠΌΠΎΠ²Π΅ Ρ Jenkins Docker Agent Pods
ΠΠ° Π΄Π° ΡΡΠΊΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° ΠΏΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΠΏΠΎΡΡΠΎΡΠ½Π΅Π½ ΡΠΎΠΌ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ Π²Π·Π΅ΠΌΠ΅ΡΠ΅ java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ maven.
ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΡΠ΅ java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, ΡΠΎΠΉ ΠΈΠ·ΡΠ΅Π³Π»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² pom.xml ΠΎΡ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° maven Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ, ΠΈ ΡΡΠ·Π΄Π°Π²Π° Π»ΠΎΠΊΠ°Π»Π½Π° .m2 ΠΊΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ.
ΠΠ΅ΡΡΡ .m2 Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Docker Π°Π³Π΅Π½Ρ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ½ΠΈΡΠΎΠΆΠ°Π²Π° ΡΠ»Π΅Π΄ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π΅Π½ ΡΠΎΠΌ Π·Π° ΠΊΠ΅ΡΠ° Π½Π° maven ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠΈΠΊΠ°ΡΠΈΠΌ ΠΊΡΠΌ Π°Π³Π΅Π½ΡΠ½ΠΈΡ ΠΌΠΎΠ΄ΡΠ» ΡΡΠ΅Π· ΡΠ°Π±Π»ΠΎΠ½ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π·Π° Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΠΌ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ° Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π°, Π½Π΅ΠΊΠ° ΠΏΡΡΠ²ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ PVC
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: maven-repo-storage namespace: jenkins spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ Jenkinsfile Ρ POD ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈΡ ΡΠΎΠΌ maven-repo-storage.
podTemplate( containers: [ containerTemplate( name: 'maven', image: 'maven:latest', command: 'sleep', args: '99d' ) ], volumes:[ persistentVolumeClaim( mountPath: '/root/.m2/repository', claimName: 'maven-repo-storage', readOnly: false ) ] ) { node(POD_LABEL){ stage("Build petclinic java app"){ git url: 'https://github.com/spring-projects/spring-petclinic.git', branch: 'main' container('maven'){ sh 'mvn -B -ntp clean package -DskipTests' } } } }
Π Π΅ΡΠΎ Π½ΠΈ ΠΊΡΠ°Ρ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΎΠ±ΡΡΠ΄ΠΈΡ ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° Jenkins, ΠΊΠ°ΠΊ Π΄Π° Ρ Π½Π°ΡΡΡΠΎΠΈΠΌ Π½Π° kubernetes Ρ Π°Π³Π΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. Π Π½Π°ΠΊΡΠ°Ρ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΅Π· ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡ (Π·Π°Π΄Π°ΡΠΈ) Π½Π° Π°Π³Π΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Docker ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° Jenkins.
ΠΠΊΠΎ Ρ Π°ΡΠ΅ΡΠ²Π°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΌΠΈ, Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΠ΅ Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ Π΄Π° ΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΠΌΠ΅ ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠΈΡΠ΅. π