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 jenkins
Helm 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=jenkins
NAME READY STATUS RESTARTS AGE
jenkins-c4b7c46d7-f54jk 1/1 Running 0 4m
Bununla 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 found
script.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 rootfs
Buradaki “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:latest
Docker 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 bash
Docker 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_gauss
Exit yazarak container’dan çıkalım.
root@dbd27647bf68:/$ exit
Container’ı 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:latest
736784463a13: 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: 3897
Jenkins adında bir namespace oluşturalım
kubectl create ns jenkins
TCP 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 jenkins
Pod’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 admin
Password:
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 Succeeded
Ardından dizine yetki verelim ki Jenkins okuyabilsin.
chmod 750 -R /.docker
Test 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Ingress 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') {}