Kubernetes Cluster Üzerinde Jenkins Agent Pod Çalıştırma
Bu yazımızda Jenkins agent pod’u kubernetes ortamımızda çalıştıracağız. Kubernetes ve jenkins hakkında daha detaylı bilgi için diğer yazılarıma göz atabilirsiniz.
1. Kubernetes Ortam Hazırlıkları
Jenkins kubernetes ortama bağlanmak için Kubernetes api’ye bağlanacak. Bu işlem için öncesinde Kubernetes ortamımızda ServiceAccount, ClusterRole ve Namespace oluşturacağız. Bu işlem için aşağıdaki gibi yaml dosyası oluşturulur ve çalıştırılır.
apiVersion: v1
kind: Namespace
metadata:
name: capstoneapiVersion: v1
kind: Namespace
metadata:
name: devops-tools
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
namespace: capstone
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: jenkins-crb-clusteradmin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: jenkins
namespace: capstone
---# kubectl apply -f config.yaml
Oluşturduğumuz ServiceAccount token bilgileri ve Api bağlantısı için gerekli olacak Api sertifikası kopyalanır bu bilgileri jenkins bağlantısında kullanacağız.
#Token
kubectl describe secret $(kubectl describe serviceaccount jenkins --namespace=capstone | grep Token | awk '{print $2}') --namespace=capstone#Sertifika
cat /etc/kubernetes/pki/apiserver.crt
2. Jenkins Ayarları
Manage Jenkins → Manage Plugins, available sekmesinden Kubernetes plugin yüklenir.
Plugin kurulumu tamamlandıktan sonra Manage Jenkins → Manage Node & Clouds → Configure Clouds sekmesine girilir ve Add a new cloud’dan kubernetes seçilir.
Kubernetes ortamının api adresi ve yukarıda yazdığım komut ile aldığımız sertifika bilgileri yazılır.
Not: Kubernetes url kubecltl’in çalıştığı .kube/config içerisinden bulabilirsiniz. Namespaces kısmına jenkins agent yada çalıştıracağımız diğer podların çalışacağı namespace yazılır.
Credentials ekranın yine kubernetes hazırlık kısmında yazdığım komut çıktısındaki token kullanarak bir credential oluşturulur.
WebSocket seçeneği seçilir ve Test Connection yapılarak bilgiler kontrol edilir.
Başarılı görünüyor.
Aslında plugin ile istediğimiz image’ın kubernetes üzerinde pod olarak ayağa kalmasını sağlayabiliyoruz ama biz bugün test amaçlı jenkins agent kullanacağız bundan sonraki yazımda farklı bir pod ayağa kaldırarak Nexus’a paket göndereceğim.
Yine aynı penceredeki pod template sekmesi açılır ve aşağıdaki gibi bilgiler doldurulur.
Artık bağlantımız hazır. Test etmek için Freestyle proje oluşturulur ve Restrict where this project can be run kısmına Pod template ekranında verdiğimiz label yazılır.
Build adımına Execute shell eklenir ve aşağıdaki gibi örnek kod yazılır ve job çalıştırılır.
echo "ArifHere"
id
Pod başarılı şekilde çalıştı.
Console Output’dan loglara baktığımızda. Kubernetes üzerinde agent oluşmuş ve komutlarımızı çalıştırmış.
Burada oluşturulan jenkins-agent pod işlem bitince terminate oluyor. Bu pod’un ayakta kalmasını istiyorsanız sleep ifadesi kullanabilirsiniz.