ЧудСсСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° намаляванС Π½Π° Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° CI срСдата Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Ρ„ΠΈΠΌΠ΅Ρ€Π΅Π½ Jenkins Π°Π³Π΅Π½Ρ‚, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Kubernetes pod, Ρ…ΠΌ. Π‘Π°ΠΌΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ° заявка Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Π°Π³Π΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° ДТСнкинс сС Π·Π°Π²ΡŠΡ€Ρ‚Π°Ρ‚. Π£ΠΌΠ΅Π½, Ρ‚ΠΎΠ²Π° Π΅!

Π’Π΅Ρ‡Π΅ ΠΎΠ±ΡΡŠΠ΄ΠΈΡ…ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° настроим Jenkins Π½Π° Kubernetes. Π’ случай, Ρ‡Π΅ сС интСрСсуватС, Π²ΠΈΠΆΡ‚Π΅ Π³ΠΎ Ρ‚ΡƒΠΊ πŸ‘‰Π Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° jenkins Π² Kubernetes

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ Jenkins Agent Π² Kubernetes?

Π—Π°Ρ‰ΠΎ Π°Π³Π΅Π½Ρ‚ΡŠΡ‚ ДТСнкинс сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΠΈ към Kubernetes pod?

Π”Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° своята ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π° ΠΊΠ°Ρ€ΠΈΠ΅Ρ€Π° с ΠΌΠ°Π»ΠΊΠΎ Ρ…ΡƒΠΌΠΎΡ€! πŸ˜†

Π₯ΡƒΠΌΠΎΡ€ΡŠΡ‚ настрана позволява Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ настройката Π½Π° jenkin agent K8.

  1. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС задСйства Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° Jenkins, ΠΏΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ Jenkins Kubernetes ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° API към Kubernetes, Π·Π° Π΄Π° създадС K8 agent pod.
  2. Π‘ някои ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠ±ΠΊΡ€ΡŠΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠ΄ пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° сС Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° jenkin agent pod.
  3. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠ΄ΡŠΡ‚ Π½Π° Π°Π³Π΅Π½Ρ‚Π° сС появи, Ρ‚ΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° срСдата, Π·Π° Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ с главния Jenkins, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π½Π΅Ρ‰ΠΎ, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΎ jnlp (Java Network Launch Protocol ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ Jenkins Π·Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ стартиранС Π½Π° Π°Π³Π΅Π½Ρ‚ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅)

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

ОсвСн Ρ‚ΠΎΠ²Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ k8 ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΡŠΡ‚ сС ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Ρ‚Π΅ Jenkins build agents Π±Π΅Π· никакъв ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Но ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° настроим приставката Kubernetes Π½Π° Jenkins. Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ!

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π½Π° плъгин Π½Π° Jenkins Kubernetes

Π—Π° Π΄Π° инсталиратС плъгина jenkins kubernetes:

  1. ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Jenkins β†’ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ

2. ΠΏΠΎΡ‚ΡŠΡ€ΡΠ΅Ρ‚Π΅ плъгина kubernetes Π² наличния Ρ€Π°Π·Π΄Π΅Π» ΠΈ Π³ΠΎ инсталирайтС. Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° снимка, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ съм Π³ΠΎ инсталирал.

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ конфигурация Π½Π° ΠΎΠ±Π»Π°ΠΊ kubernetes със слСднитС ΡΡ‚ΡŠΠΏΠΊΠΈ:

  1. Π‘Π»Π΅Π΄ инсталиранС ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Manage Jenkins –› Manage Node & Clouds

2. Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Π»Π°Ρ†ΠΈ

3. β€žΠ”ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ² ΠΎΠ±Π»Π°ΠΊβ€œ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Kubernetes.

4. Π˜Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π·Π° Kubernetes Cloud

Π—Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΎΠ±Π»Π°ΠΊΠ° kubernetes Π½Π° jenkins

Π’ΡƒΠΊ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π° случая

  1. Π‘ΡŠΡ€Π²ΡŠΡ€ Π½Π° Jenkins (Π³Π»Π°Π²Π΅Π½), Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π² ΡΡŠΡ‰ΠΈΡ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Kubernetes
  2. Π‘ΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Π½Π° Jenkins (главният) сС ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ²Π° ΠΎΡ‚ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes.

Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡŠΡ€Π²ΠΈΡ сцСнарий

Π‘ΡŠΡ€Π²ΡŠΡ€ Π½Π° Jenkins, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π² ΡΡŠΡ‰ΠΈΡ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Kubernetes

Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Jenkins Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° Kubernetes със сСрвизСн Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π·Π° внСдряванС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ Π½Π° Π°Π³Π΅Π½Ρ‚Π°, Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° спомСнавамС URL адрСса Π½Π° Kubernetes ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π° Π½Π° сСртификата.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΡ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π° Π½Π° услугата, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π±ΡƒΡ‚ΠΎΠ½Π° ВСстванС Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ. Врябва Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π°ΠΊΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Jenkins ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ с основния API Π½Π° Kubernetes.

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°:Ρ‚ΡƒΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ пространството ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° kubernates ΠΊΠ°Ρ‚ΠΎ jenkins (ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‰Π΅ бъдС Ρ€Π°Π·Π³ΡŠΡ€Π½Π°Ρ‚Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π° jenkins agent). Използвам Ρ‚ΠΎΠ·ΠΈ, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Jenkin ΡΡŠΡ€Π²ΡŠΡ€ (Π³Π»Π°Π²Π΅Π½).

НСка Π²ΠΈΠ΄ΠΈΠΌ сцСнария, Π² ΠΊΠΎΠΉΡ‚ΠΎ jenkins Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ kubernetes ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ извън (някъдС Π΄Ρ€ΡƒΠ³Π°Π΄Π΅) ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° kubernetes.

Π‘ΡŠΡ€Π²ΡŠΡ€ Π½Π° Jenkins, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ извън ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes

Ако Π²Π°ΡˆΠΈΡΡ‚ Jenkins ΡΡŠΡ€Π²ΡŠΡ€ Ρ€Π°Π±ΠΎΡ‚ΠΈ извън ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes, трябва Π΄Π° посочитС слСдното.

  1. URL адрСс Π½Π° Kubernetes: Π’ΠΎΠ²Π° Π΅ ΠΊΡ€Π°ΠΉΠ½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Kubernete master API. Ако https Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ https url.
  2. ΠšΠ»ΡŽΡ‡ Π½Π° Kubernete Server Certificate:Ако ΠΈΠΌΠ°Ρ‚Π΅ Kubernetes Cluster CA сСртификат, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π΅Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сСртификата ΠΎΡ‚ всСки Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ pod, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π·Π° услуга/var/run/secrets/kubernetes.io/serviceaccount/ca.crt. Ако няматС сСртификата, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ опцията β€ždisable https certificate checkβ€œ. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² /etc/kubernetes/pki/ Π² главния възСл
  3. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ: Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ДТСнкинс Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠΈΡ€Π° с ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° 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 шаблона.

  1. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° JNLP ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ приставката Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към ΡΡŠΡ€Π²ΡŠΡ€Π° Π½Π° jenkins. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ с пСрсонализирано JNLP ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈ условиС Ρ‡Π΅ Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ jnlp Π² шаблона Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.
  2. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ мноТСство шаблони Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π² Π΅Π΄ΠΈΠ½ шаблон Π½Π° ΠΏΠΎΠ΄. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° всСки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°.
  3. 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.

Ако харСсватС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΌΠΈ, Π²ΠΈΠ½Π°Π³ΠΈ стС Π΄ΠΎΠ±Ρ€Π΅ дошли Π΄Π° ΠΌΠ΅ послСдватС ΠΈΠ»ΠΈ Π΄Π° ΠΌΠ΅ ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅. πŸ™‚