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') {}