Helm kurulumu için aşağıdaki yazıya göz atın ve adımları tamamlayın. Helm paket yöneticisinden Gitlab’ı kuracağız.
jenkins adında bir namespace oluşturuyoruz
kubectl create ns jenkinsHelm ile Jenkins’i kaldırıyoruz.
helm install jenkins \
   --set jenkinsUser=admin \
   --set jenkinsPassword=sezer.test \
   bitnami/jenkins \
   --namespace jenkins- Kullanıcı adı admin şifre sezer.test olarak belirledik. Yukarıdaki komutta buna göre değişiklik yapabilirsiniz.
Aşağıdaki komut ile Jenkins podlarını kontrol ediyoruz.
kubectl get pods --namespace=jenkinsNAME                      READY   STATUS    RESTARTS   AGE
jenkins-c4b7c46d7-f54jk   1/1     Running   0          4mBununla beraber bir domain üzerinden yayına vermek için ingress yazıp Jenkins servisi ile matchlemeniz gerekiyor. Daha önce kurduğumuz MetalLB ingress üzerinden nasıl uygulamanızı tek ip ile dışarı verebileceğinizi anlatmıştım.

Alternatif kurulum – Kubernetes üzerinde çalışan Jenkins için Docker ve Kubectl kurulumu
Kubernetes üzerinde Jenkins’i kurarken default olarak docker client yüklü gelmiyor. Bu sebepten dolayı Jenkinsfile gibi dosyalarda docker.build gibi docker komutlarını kullandığınızda aşağıdaki gibi hata alırsınız.
script.sh: docker: not foundscript.sh: kubectl: not foundŞimdi kendimize özel bir image yaratacağız.
Github üzerinde projeyi clone olarak sunucumuza çekelim.
git clone https://github.com/bitnami/bitnami-docker-jenkins.gitİlgili dizine gidelim.
bitnami-docker-jenkins/2/debian-10# ls -la
total 24
drwxr-xr-x 4 root root 4096 Mar 24 10:10 .
drwxr-xr-x 3 root root 4096 Mar 24 10:10 ..
-rw-r--r-- 1 root root 2129 Mar 24 10:10 Dockerfile
-rw-r--r-- 1 root root  250 Mar 24 10:10 docker-compose.yml
drwxr-xr-x 4 root root 4096 Mar 24 10:10 prebuildfs
drwxr-xr-x 3 root root 4096 Mar 24 10:10 rootfsBuradaki “Dockerfile” dosyasını editor ile açıp EXPOSE komutunun üstüne aşağıdaki komutları yapıştıralım.
ARG DOCKER_CLIENT="docker-20.10.9.tgz"
RUN cd /tmp/
RUN curl -sSL -O https://download.docker.com/linux/static/stable/x86_64/${DOCKER_CLIENT}
RUN tar vxf ${DOCKER_CLIENT}
RUN mkdir -p /usr/local/bin
RUN mv ./docker/docker /usr/local/bin
RUN chmod +x /usr/local/bin/docker
RUN rm -rf /tmp/*
RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
RUN install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
RUN chmod +x kubectl
RUN mkdir -p ~/.local/bin
RUN cp ./kubectl ~/.local/bin/kubectl
RUN kubectl version --clientŞimdi Dockerfile dosyasını registry adresimize push etmeden önce compile edelim
docker build -t harbor.sezer.test:443/library/jenkins-with-docker:latest .Docker compose ile uğraşmamak için doğrudan image’ı run ile çalıştırıp volume olarak docker.sock tanımlayalım. Daha sonra exec ile içerisine girip docker komutumuzu test edicez.
docker run -d --group-add $(stat -c '%g' /var/run/docker.sock) -v /var/run/docker.sock:/var/run/docker.sock -P harbor.sezer.test:443/library/jenkins-with-docker:latestDocker ps ile kontrol ediyoruz.
root@rancher01:~/bitnami_docker# docker ps
CONTAINER ID   IMAGE                                                                      COMMAND                  CREATED              STATUS              PORTS                                                                      NAMES
dbd27647bf68   harbor.sezer.test:443/library/jenkins-with-docker:latest   "/opt/bitnami/script…"   About a minute ago   Up About a minute   8080/tcp, 8443/tcp, 50000/tcp                                              lucid_gaussŞimdi içeresine girelim.
docker exec -it -u root dbd27647bf68 bashDocker komutlarımız doğru çalışıyor mu kontrol edelim image içerisinde.
jenkins@52aac1513afc:/$ docker ps
CONTAINER ID   IMAGE                                                          COMMAND                  CREATED         STATUS         PORTS                                                                      NAMES
dbd27647bf68   harbor.sezer.test:443/library/jenkins-with-docker:latest   "/opt/bitnami/script…"   3 seconds ago   Up 2 seconds   8080/tcp, 8443/tcp, 50000/tcp                                              lucid_gaussExit yazarak container’dan çıkalım.
root@dbd27647bf68:/$ exitContainer’ı durduralım
docker stop dbd27647bf68Şimdi bu container’ı bir image haline getirelim.
docker commit dbd27647bf68 harbor.sezer.test:443/library/jenkins-with-docker:latestŞimdi de bu image’ı registry’e pushlayalım
docker push harbor.sezer.test:443/library/jenkins-with-docker:latest736784463a13: Pushed 
b3dea61d7edb: Pushed 
df87214df5a5: Pushed 
41c9bb120783: Pushed 
82f358e60a16: Pushed 
0c8c9f92ac56: Pushed 
61db287e5473: Pushed 
fa7884a2ded0: Pushed 
f72f7b196037: Pushed 
5e4165082f02: Pushed 
2bd32df212a2: Pushed 
fc1d1168acff: Pushed 
6632a5be156d: Pushed 
6c18c06bf764: Pushed 
fe7a05eda2c2: Pushed 
2b492f305509: Pushed 
81191ab3f03d: Pushed 
latest: digest: sha256:1d9431a706a6b051053b8cd835f7d7c89551b9cbd358632b9afa1c2ff52fb5f2 size: 3897Jenkins adında bir namespace oluşturalım
kubectl create ns jenkinsTCP olarak docker dind kullanacağız. Bu nedenle values.yaml adında bir dosya oluşturup içerisine aşağıdaki komutları ekleyin.
sidecars:
  - name: docker
    image: docker:dind
    command: ["dockerd"]
    args: ["-H", "tcp://127.0.0.1:2376"]
    ports:
      - containerPort: 2376
    securityContext:
      privileged: trueŞimdi rancher makinesi üzerinden Jenkins’i kaldıralım
helm install jenkins \
--set image.registry=harbor.sezer.test:443 \
--set image.repository=library/jenkins-with-docker \
--set image.tag=latest \
--set jenkinsUser=admin \
--set service.type=ClusterIP \
--set jenkinsPassword=sezer.test \
-f values.yaml bitnami/jenkins \
--namespace jenkinsPod’un çalıştığı Worker’a gidip içerisine Docker exec -it ile girelim.
docker exec -it -u root 34e /bin/bash --Docker registry kullanacağımız için içerisinde login olalım.
docker -H tcp://127.0.0.1 login harbor.sezer.test:443 -u adminPassword: 
WARNING! Your password will be stored unencrypted in /.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login SucceededArdından dizine yetki verelim ki Jenkins okuyabilsin.
chmod 750 -R /.dockerTest için image pushlayabilirsiniz ve aşağıdaki komutla docker düzgün çalışıyor mu check edebilirsiniz
docker -H tcp://127.0.0.1:2376 psCONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMESIngress ayarlarınızı yaptıktan sonra web isteği gönderince aşağıdaki ekranla karşılaşacaksınız

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
b39aakj37834jkklsdkj1jn1kjlnkbd
This may also be found at: /bitnami/jenkins/home/secrets/initialAdminPasswordÖzelleştirme yapacaksanız tek tek pluginleri kurabilirsiniz veya önerilen kurulumu seçip bu adımı atlayabilirsiniz.

Daha sonra ilgili admin bilgilerini doldurarak kurulumu bitirin

Son olarak Jenkinsfile dosyalarınızda docker komutlarını kullanırken aşağıdaki gibi kullanım yapmalısınız.
docker.withServer('tcp://127.0.0.1:2376') {}