Bu yazımızda docker üzerinde jenkins kurarak kullanmaya başlayacağız. Jenkins şu anda devops araçlarının içinde en çok kullanılan bir uygulamadır. Proje derleme, kurallar tanımlama, docker imaj oluşturma gibi bir çok özelliği de içerisinde barındırmakla beraber tüm GIT platformlarını da desteklemektedir.

Öncelikle aşağıdaki gibi bir Dockerfile oluşturuyoruz. Kendi imajımızı yaratmak her zaman için geliştrme konusunda faydalı olacaktır. Fakat direk resmi repodan indirebilir ve oradan da devam edebilirsiniz. Jenkins Java tabanlı bir araç olduğu için ben JDK üzerinden kurulum yapıyorum ama siz alpine ya da başka dağıtım kullanmak isteyebilirsiniz. O nedenle https://github.com/jenkinsci/docker adresinden farklı dağıtımları seçebilirsiniz.

FROM openjdk:8-jdk-stretch

RUN apt-get update && apt-get upgrade -y && apt-get install -y git curl && rm -rf /var/lib/apt/lists/*

ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
ARG http_port=8080
ARG agent_port=50000
ARG JENKINS_HOME=/var/jenkins_home
ARG REF=/usr/share/jenkins/ref

ENV JENKINS_HOME $JENKINS_HOME
ENV JENKINS_SLAVE_AGENT_PORT ${agent_port}
ENV REF $REF

# Jenkins is run with user `jenkins`, uid = 1000
# If you bind mount a volume from the host or a data container,
# ensure you use the same uid
RUN mkdir -p $JENKINS_HOME \
  && chown ${uid}:${gid} $JENKINS_HOME \
  && groupadd -g ${gid} ${group} \
  && useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}

# Jenkins home directory is a volume, so configuration and build history
# can be persisted and survive image upgrades
VOLUME $JENKINS_HOME

# $REF (defaults to `/usr/share/jenkins/ref/`) contains all reference configuration we want
# to set on a fresh new installation. Use it to bundle additional plugins
# or config file with your custom jenkins Docker image.
RUN mkdir -p ${REF}/init.groovy.d

# Use tini as subreaper in Docker container to adopt zombie processes
ARG TINI_VERSION=v0.16.1
COPY tini_pub.gpg ${JENKINS_HOME}/tini_pub.gpg
RUN curl -fsSL https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static-$(dpkg --print-architecture) -o /sbin/tini \
  && curl -fsSL https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static-$(dpkg --print-architecture).asc -o /sbin/tini.asc \
  && gpg --no-tty --import ${JENKINS_HOME}/tini_pub.gpg \
  && gpg --verify /sbin/tini.asc \
  && rm -rf /sbin/tini.asc /root/.gnupg \
  && chmod +x /sbin/tini

# jenkins version being bundled in this docker image
ARG JENKINS_VERSION
ENV JENKINS_VERSION ${JENKINS_VERSION:-2.176.2}

# jenkins.war checksum, download will be validated using it
ARG JENKINS_SHA=33a6c3161cf8de9c8729fd83914d781319fd1569acf487c7b1121681dba190a5

# Can be used to customize where jenkins.war get downloaded from
ARG JENKINS_URL=https://repo.jenkins-ci.org/public/org/jenkins-ci/main/jenkins-war/${JENKINS_VERSION}/jenkins-war-${JENKINS_VERSION}.war

# could use ADD but this one does not check Last-Modified header neither does it allow to control checksum
# see https://github.com/docker/docker/issues/8331
RUN curl -fsSL ${JENKINS_URL} -o /usr/share/jenkins/jenkins.war \
  && echo "${JENKINS_SHA}  /usr/share/jenkins/jenkins.war" | sha256sum -c -

ENV JENKINS_UC https://updates.jenkins.io
ENV JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental
ENV JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals
RUN chown -R ${user} "$JENKINS_HOME" "$REF"

# for main web interface:
EXPOSE ${http_port}

# will be used by attached slave agents:
EXPOSE ${agent_port}

ENV COPY_REFERENCE_FILE_LOG $JENKINS_HOME/copy_reference_file.log

USER ${user}

COPY jenkins-support /usr/local/bin/jenkins-support
COPY jenkins.sh /usr/local/bin/jenkins.sh
COPY tini-shim.sh /bin/tini
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins.sh"]

# from a derived Dockerfile, can use `RUN plugins.sh active.txt` to setup ${REF}/plugins from a support bundle
COPY plugins.sh /usr/local/bin/plugins.sh
COPY install-plugins.sh /usr/local/bin/install-plugins.sh

Şimdi build ediyoruz.

docker build -t jenkins:v1 .

Buradaki . işareti Dockerfile dosyasının aynı dizinde olduğunu işaret eder. Yani farklı dizindeki bir Docker file ile de kurulum yapılabilir. Biz aynı dizinde olduğumuz için direk . işareti ile devam ettik.

docker image ls
jenkins     v1      2c34238a4c60        About a minute ago   520MB

İmajımız hazır şimdi verilerin ve ayarların kaybolmaması için volume oluşturuyoruz.

docker volume create jenkins_home

Şimdi volume mount ederek uygulumamızı ayağı kaldırıyoruz.

docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins

Uygulamamız şu anda kuruldu ve çalışmaya hazır. Şimdi ilk bağlantımızı yapıyoruz.

docker logs <CONTAINER_ID> diyerek jenkinsin çalıştığı kontenyera bağlanıp logundan verdiği geçici admin passwordunu alıyoruz.

Şimdi ilk kullanıcımızı oluşturarak jenkinse giriş yapıyoruz. Aşağıdaki gibi linklerimizi düzenliyoruz ve devam ediyoruz.

Şimdi jenkinsin varsayılan eklentilerini yükleyerek devam ediyoruz.

Önerilenleri Seçip devam ediyoruz
Artık jenkins bu adımdan sonra kullanıma hazırdır.
Eğer bu ekrana geldiyseniz adımları doğru tamamladınız demektir.

Her hangi bir sorun yaşamanız durumunda yukarıdaki resmi siteyi inceleyerek sorun giderebiirsiniz.

Share: