Jenkins Slave olarak Kubernetes Pod kullanmak

H. Alperen Selcuk
5 min readJun 16, 2021

--

Jenkins master üzerinde kubernetes cloud confiği ve kullanımı anlatmaya çalışacağım.

bir önceki yazımda slave olarak docker container kullanımından bahsetmiştim

bu yazımda daha çok kullanılan bir metod olan slave olarak kuberbetes pod kullanımından bahsedeceğim.

burada bir docker host ve kubernetes cluster kullanacağız. isterseniz hard-way kurulum yapabilir veya minikube kullanabilir ya da cloud çözümünü uygulayabilirsinizi, ben google ın GKE sini kullanıp bir cluster yaratacağım.

onun öncesinde docker host üzerinde bir jenkins kuralım. jenkins kurmadan önce bir volume yaratacağız bunu mount edeceğiz ki sonraki kapanıp açılmalarda jenkinste yaptıgımız datalar kaybolmasın. volume createden sonra docker run ile container i create edeceğiz.

docker volume create jenkins_pathdocker run --name jenkins -d -v jenkins_path:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts

jenkins password için;

docker exec -ti jenkins cat /var/jenkins_home/secrets/initialAdminPassword

alıp jenkinse giriyoruz. install suggested plugins diyerek önerilen pluginleri yükleyebiliriz. daha sonra user pass girerek kullanmaya başlayalım.

jenkins e girdikten sonra ilk işimiz manage jenkins-> manage plugins-> available den kubernetes plugini yükleyeceğiz

daha sonra manage jenkins->manage nodes and clouds ->configure clouds dan add new cloud diyerek kuberenetes seçeneğini işaretliyoruz.

ilk iş olarak kubernetes cloud details den kuberentes url i set edicez. bunu bulmak için kubernetes clusterınıza gidip kubectl cluster-info diyebilirsiniz. ardından kuberentes için cert key gireceğiz.

ya da tüm bunlarla uğraşmadan kuberentes credentials e kubernetes config file ımızı ekleyerek devam edebiliriz, config file da cluster ile ilgili bilgiler hazır bulunmaktadır. add credentials diyerek jenkins seçip ekleyelim.

credential eklerken secret file olarak seçiyoruz ve burada kullanacağımız dosya kubernetes cluster in config dosyası olacak. ~/.kube/config altinda bulunur. bunu export edip burada kullanacağız.

daha sonra credentials da yarattığımız key i seçip test connection dediğimiz anda bağlandığını görebilirsiniz.

jenkins url için docker host sunucu IP si ve port 8080 kullanacağız. jenkins tunnel için de docker run derken kullandığımız 50000 i gireceğiz, bu port masterin slavele connecgtion kurduğu portdur.

bundan sonraki adımda pod label gireceğiz, bu label jenkinsin tetiklediği podları kubernetes üzerinde görmek için kullanıyoruz mesela key: origin value: jenkins-slave verelim podları görmek için kullanacağımız komut:
kubectl get pods -l origin=jenkins-slave

bunu da yaptıktan sonraki adım olarak pod template ekleyeceğiz,

burada bulunan label ilk yaptıgımızdan farklı, ilk label kubernetes içindi buradaki ise jenkins için. jenkins job ında burayı tetiklediğimizi belirtmek için kullanacağız.

bir sonraki adım pod içinde çalışacak container i belirtmek, add container template diyerek ekliyoruz.

jnlp-slave image ini kullanacağız. working directory olarak /home/jenkins ve environment olarak jenkins base url vereceğiz ki container içinden jenkinse erişilsin.

advance kısmından container içim belli kaynak değerleri belirleyebilirsiniz, hatta yapınız gereği farklı image kullanmanız da gerekiyorsa yeni bir container template ekleyebilirsiniz. diğer kısımları default bırakarak save ederek kapatıyoruz.

kuberenetes clusterdan jenkins e tcp 8080 ve 50000 erişilmesi gerekiyor. bunu da firewall ayalarından yapmalısınız.

denemek için ilk jobımızı oluşturalım. basit bir pipeline yazalım.

daha önce jenkins docker demomuzda olduğu gibi pipeline da kubernetes slave ini seçeceğiz, bunun için de pod templatede verdiğimiz label i kullanacağız.

pipeline {
agent {
label "kube-pod"
}
stages {
stage ("test") {
steps {
echo "hello world"
sleep 5
}
}
}
}

save yapıp build now yaparak çalıştıralım. ve kuberenetes pod oluşuyor mu kontrol edelim.

pod verdiğimiz işi yapmak için create edildi verdiğimiz işi yaptı ve terminate edildi.

pipeline loguna bakarsak da podun yaptığı işi görebiliriz.

bu işlemi jenkins in kubernetes üzerinde build ve deploy pipelinelarında sıklıkla kullanırız. gerek app build etme gerek repoya pushlama gerek deploy etme aşamaları için bu podlardan yararlanabiliriz böylece verdiğimiz işi yapıp terminate olmasından dolayı resourcelarımızı da iyi kullanmış oluruz.

Docker Build + Push

mesela docker build ve push yapmak istiyorsunuz bunun için container template ekleyip stage içinde “container docker” diyerek (docker label ismi) slave pod un içinde çalışan containerda docker kullanmayı sağlıyoruz.

bunun için de docker in docker kullanılması gerekiyor çünkü pod üstünde çalıştığı node un container runtime ını kullacanak.

örnek vermek gerekirse, öncelikle pod template ekleyeceğiz:

ardından container template:

steps aşamasından sonra container belirterek docker build yapabiliyoruz.

stage('Building image') {
steps {
container('docker') {
script {
sh '''
docker build -t hasanalperen/deneme:v1 .
docker push -t hasanalperen/deneme:v1
'''
}
}
}
}

umarım faydalı olmuştur.

h.a.s.

Sign up to discover human stories that deepen your understanding of the world.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response