Docker ile Jenkins Kurulumu

Jenkins Nedir ?

Açık kaynak otomasyon sunucusudur.Jenkins herhangi bir projenin build edilmesini, deploy edilmesini ve bu işlemlerin otomatize edilmesini sağlar.

Not: Jenkins kullanarak neredeyse herşeyi otomatize edebiliriz.

Jenkins Kurulumu

Windows için Docker Kurulumu

Docker’ı Windwos üzerinde çalıştırabilmemiz için bazı sistem gereksinimlerini sağlamamız gerekiyor.Bunlar aşağıdaki şekilde listelenmiştir.

Sistem Gereksinimleri:

  1. Windows 10’un 64-bit: Pro, Enterprise, veya Education sürümlerinden birtanesine sahip olmamzı gerekiyor.

Windows Home için ,Windows Home için Docker kurulumu yazısına bakınız

  1. Windows üzerinde Hyper-V ve Container teknolojilerinin aktif hale getirilmesi gerekiyor.
  2. Docker’ı Windows üzerinde başarılı şekilde çalıştırabilmek için gereken donanım özellikleri aşağıdaki şekilde sıralanmıştır.
  • 64 bit işlemci
  • 4gb RAM
  • Bios seviyesinde sanallaştırma seçeneğinin aktifleştirilmis olması gerekiyor.

Gereksinimleri sağlıyorsanız kurulum aşamasına geçebilirsiniz.Kurulum aşamasını maddeler halinde sırayla anlatacağım.

Başlamadan önce ilk olarak Buradan Windows için Docker Community Edition’ın Executable uygulamasını indiriyoruz.

  1. exe dosyasının indirilmesi tamamlandıktan sonra uygulamamızı çalıştıralım.
  2. Kurulum sırasında, Konfigurasyon sayfasında Hyper-V seçeneğinin işaretlendiğinden emin ol.
  3. Kurulum aşamalarını takip ederek devam edin.
  4. Kurulum tamamlandıktan sonra Kapat’a basarak kurulumu tamamlayın.
  5. Eğer admin hesabı kullanıcı hesabından farklıysa ,kullanıcı hesabımızı docker-users grubuna eklememiz gerekiyor.Bunun için Başlat menusunden Bilgisayar Yönetimi diye aratıp çıkan uygulamayı yönetici olarak çalıştırıyoruz.Sonrasında soldaki menuden Yerel kullanıcı ve Gruplar > Gruplar > docker-users kısmına geliyoruz.docker-users seçeneğine sağ tıklayıp gruba ekle seçeneğine basıyoruz.Ve işlemi tamamlıyoruz.

Uygulamamızı kurduk, şimdi Docker Desktop ugyulamasını çalıştırıyoruz.Sağ alt kısımda balina ikonu sabit şekilde olunca açıma işlemi tamamlanmış demektir.O ikona sağ tıklayarak panel kısmına girebiliriz.Bu ekrandan da sağ üstteki ayarlar simgesinden ayarlara ulaşabiliriz.

Son olarak test için terminalden aşağıdaki komutu çalıştırarak docker’ın makinemize yüklendiğinden emin olabiliriz.

  $ docker --version

Bu kurulumda Docker ile birlikte Docker Compose’da beraberinde geliyor.Bunu test etmek için aşağıdaki komutu çalıştırıp docker compose’u test edebiliriz.

  $ docker-compose -v

Eğer bir Ubuntu veya Mac OS cihazına sahipseniz yukarıdaki Windows için anlatılan adımları atlayıp direk Docker ve Docker compose kurulumuna geçebilirsiniz.

Docker Sözlüğü

Docker kurulumuna başlamadan önce docker’ı kullanırken birçok defa göreceğimiz kavramları ve ne anlama geldiklerini bilmek bizim için faydalı olacaktır.

Kelime Tanımı
amd64 AMD64, AMD’nin Intel’in x86 mimarisinin 64 bit uzantısıdır ve x86_64 olarak da anılır
aufs aufs (advanced multi layered unification filesystem).Yani gelişmiş çok katmanlı dosya sistemi demektir.Docker’ın depolama aracı olarak desteklediği bir Linux dosya sistemidir.
Base image Bir base image’ın Dockerfile’ında parent bir image bulunmaz.FROM scratch komutunun bir Dockerfile içerisine konularak kullanılmasıyla oluşur
Build Bir docker imajının Dockerfile kullanılarak build edilmesi sürecidir.
Cluster Bir cluster workloadları çalıştırmak yüksek kullanılabilirlik sağlamak için birlikte çalışan bir grup makinedir.
Compose Docker ile karmaşık uygulamaları tanımlamak ve çalıştırmak için bir araçtır.
Container Bir container docker imajının runtime instance’ıdır.Bir container ,bir docker imajı,bir çalışma ortamı ve standart bir talimat kümesinden meydana gelir.
Dockerfile Dockerfile, bir Docker imajı oluşturmak için normalde manuel olarak yürüteceğiniz tüm komutları içeren bir metin belgesidir. Docker, Dockerfile’dan okuduğu komutlar ile otomatik olarak imajları build eder.
Image Docker imajları containerların temelini oluşturular.Image işletim sistemi kütüphanelerinin bulunduğu yapıdır. Bir imaj tipik olarak üst üste yığılmış katmanlı dosya sistemleri birleşimini içerir.
Machine Bilgisayarınızda, bulut sağlayıcılarında(cloud providers) ve kendi veri merkezinizde Docker ana bilgisayarları oluşturmayı kolaylaştıran bir Docker aracıdır.
Namespace Linux namespace’i , sistem kaynaklarını izole eden ve sanallaştıran bir Linux çekirdeği özelliğidir. Namespace’ler, Docker’ın izolasyon modelinin önemli bir parçasıdır.
Node Bir Node, swarm modunda Docker Engine’in bir instance’ını çalıştıran fiziksel veya sanal bir makinedir.
Registry Retgistry, Imajların repositorylerini barındıran hosted bir servistir.Default Registry’e Docker Hub’dan veya $ docker search komutu ile ulaşılabilir.
Repository Repository, Docker imajları kümesi olarak bilinir. Bir repository ,bir registry servise push edilerek paylaşılabilir. Bir repository içerisinde bulunan imajın farklı sürümleri tag’ler aracılığıyla etiketlenebilir. Örnek olarak nginx repository’si ve tagleri incelenebilir.

Docker kurulumu

Aşağıdaki komutları sırasıyla komut satırında çalıştırıp CentOS üzerinde tamamlıyoruz

  1. Repository’den docker ve yum-utils’in çekilmesi
    $ sudo yum install -y yum-utils

    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
  1. Docker engine ve docker cli’ın kurulması
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  1. Docker’ı başlat
    $ sudo systemctl start docker

4.

  $ sudo systemctl enable docker
  1. Docker’a gerekli izinlerin verilmesi
  $ sudo usermod -aG docker <kullanıcı_adı>
  1. Docker’ın makinamıza düzgünce yüklendiğinden emin olmak için bu komutu çalıştırıyoruz.
  $ sudo docker run hello-world

Bu işlemleri yaptıktan sonra her seferinde komutların başına sudo yazmamak için docker grubuna kullanıcı adımızı eklememiz gerekir

  1. Eğer yoksa docker grubu oluşturuyoruz.
  $ sudo groupadd docker
  1. Kullanıcımızı docker grubuna ekliyoruz
  $ sudo usermod -aG docker $USER
  1. Ardından bu komutu çalıştırıyoruz
  $ newgrp docker
  1. Şimdi aşağıdaki komutu çalıştırınca hata almadan sonuçalrı listelemeli
  $ docker ps

Docker Compose kurulumu

Docker Compose nedir ?

Docker Compose, multi container Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Compose ile, uygulamanızın hizmetlerini yapılandırmak için bir YAML dosyası kullanırsınız.Belirli docker compose komutlarını kullanarak bu containerları aynı anda çalıştırabiliriz.

  1. İlk olarak Docker Compose’un stabil sürümünü makinemize indirebilmek için aşağıdaki komutu çalıştıralım
  $ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. Docker compose’a executable yetkisi veriyoruz.
  $ sudo chmod +x /usr/local/bin/docker-compose
  1. Son olarak docker-compose’u test etmek için aşağıdaki komutu çalıştırıyoruz.
  $ docker-compose --version

Eğer aşağıdakine benzer bir çıktı alıyorsak docker-compose sorunsuz bir şekilde kurulmuş demektir.

  docker-compose version 1.27.4, build 1110ad01

NOT: Eğer docker-compose komutunu kurulumdan sonra çalıştırıp hata alıyorsak ,ilgili hata muhtemelen path ile alakalı bir hata olacaktır.Bunun için aşağıdaki komutu çalıştırıp tekrar docker-compose komutunu test edeceğiz.

  $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Jenkins Docker Imajının Kurulması

Docker ,Docker Hub adını verdiği repository servisinde birçok public veya private teknolojinin imajlarını barındırır.Bu teknolojilere örnek olarak elasticsearch,redis,nginx,postgresql,mysql gibi teknolojiler verilebilir.

Bizim ihtiyacımız olan jenkins teknolojisi de aynı şekilde docker hub üzerinde bulunuyor.Docker hub’a girdikten sonra arama kısmına jenkins yazarak kolayca jenkins imajına ulaşabiliriz.

Docker hub’ta jenkins’i bulduktan sonra aynı sayfada jenkins’i makinemize çekmeye yarayacak komutu bulabiliriz.Aişağıdaki komutu , komut satırında çalıştırarak jenkins imajını makinemize çekmiş olacağız.

  docker pull jenkins/jenkins

Eğer jenkins imajının spesifik bir versiyonunu indirmek istersek, Docker Hub da bulunan jenkins sayfasında Tag tabı altında birçok sürümü bulabiliriz.Spesifik bir sürümü makinemize çekmek için aşağıdaki şekilde komutu çalıştırabilirsiniz.

  $ docker pull jenkins/jenkins:lts -> latest yani bu imajın son sürümünü çeker
  $ docker pull jenkins/jenkins:lts-centos7 -> centos için latest versiyonu çeker.

Docker’ın jenkins imajını makinemize çekmesi internet hızına bağlı olarak belli bir süre alabilir.Kurulum tamamlandıktan sonra aşağıdaki komutu çalıştırarak jenkins imajının makinemize çekildiğinden emin olabiliriz.

  $ docker images

Docker’ın imajları nerede tuttuğunu öğrenmek için aşağıdaki komutu çalıştırıyoruz.

  $ docker info | grep -i root

Bu komut çıktı olarak bize aşağıdakine benzer bir çıktı verir.

  Docker Root Dir: /var/lib/docker

Jenkins için docker-compose dosyasının oluşturulması

  1. İlk olarak jenkins adında bir klasör oluşturacağız.Bu klasör istediğimiz bir yerde olabilir.Ardından bu klasör içerisinde jenkins-data adında bir klasör daha oluşturacağız.Aşağıdaki komutları kullanarak bu klasörleri oluşturabiliriz.
  $ mkdir jenkins
  $ cd jenkins
  $ mkdir jenkins-data
  $ cd jenkins-data
  1. Ardından bir docker-compose.yml dosyası oluşturup içerisine jenkins ile ilgili komutları yazacağız.Aşağıdaki komutu kullanarak dosya oluşturabiliriz.
  $ touch docker-compose.yml
  1. Sonrasında Jenkins imajını build edebilmek için bu docker-compose.yml dosyasına komutları eklememiz gerekiyor.Aşağıdaki şekilde docker-compose.yml dosyasının içini dolduruyoruz.
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - '8080:8080'
    volumes:
      - './jenkins_home:/var/jenkins_home'
    networks:
      - net
networks:
  net:

jenkins_data klasörünün içerisinde jenkins_home klasörünü de oluşturmamız gerekiyor. bunun için jenkins_data klasörü içerisinde aşağıdaki komutu kullanmalıyız.

  $ mkdir jenkins_home

Ayrıca jenkins_home klasörünün gerekli izinlere sahip oldugundan emin olmamız gerekiyor aksi takdirde jenkins dosyaları kopyalama işlemini yapamaz.Bu yüzden jenkins_home klasörüne aşağıdaki komut ile gerekli izinleri vereceğiz.

  $ sudo chown 1000:1000 jenkins_home -R

Gerekli ayarlamaların hepsini tamamladık şimdi docker-compose dosyamızı çalıştırarak jenkins server’ı başlatacağız.Aşağıdaki komutu kullanarak docker-compose dosyasını çalıştırabiliriz.

  $ docker-compose up -d

Yukarıdaki komutu çalıştırdıktan sonra docker ps komutunu çalıştıralım ve gelen listede jenkins serverın çalışmaya başladığını görebiliriz.

Aşağıdaki komutu kullanarak çalışmaya başlayan jenkins servisinin loglarını izleyebiliriz.

  $ docker logs -f jenkins

Ardından browser’ı açıp url çubuğuna localhost:8080 adresini yazıp gittiğimizde jenkins servisinin ayakta olduğunu göreceğiz.

Aşağıdaki resimde görüldüğü gibi bir ekran bizleri karşılayacak.

Giriş Ekranı

Burada yapmamız gereken $ docker logs -f jenkins komutunu çalıştırıp aşağıdaki resimde işaretlenmiş kısımdaki şifreyi alıp yukarıdaki resimde belirtilen input içerisine yazıp ilerliyoruz.

Jenkins Logs

Ardından karşımıza çıkan ekranda Install Suggested Plugins kutucuğuna basıyoruz ve jenkins aşağıda olduğu gibi bize gerekli pluginleri kuruyor.

Jenkins Plugins

Pluginlerin kurulumu tamamlandıktan sonra Admin oluşturma sayfasına geliyoruz.Burada gerekli boşlukları doldurarak bir kullanıcı oluşturuyoruz.

Bu kısmı da tamamladıktan sonra karşımıza url ekranı gelecektir burayı da kaydedip devam ederek kurulum sürecini başarıyla tamamlamış bulunuyoruz.Ve jenkins bizi kontrol paneline yönlendiriyor.

Docker compose ile ilgili ekstra komutlar

  • Eğer açık olan servisleri kapatmak istersek aşağıdaki komutu kullanacağız.
  $ docker-compose stop
  • Serivisleri açmak için ise aşağıdaki komutu kullanıyoruz.
  $ docker-compose start
  • Bir servisi yeniden başlatmak için ise aşağıdaki komutu kullanmalıyız.
  $ docker-compose restart jenkins
  • Servisleri silmek için aşağıdaki komut kullanılır.Sİlinen servisler volumes içerisinde tutulmaya devam eder.
  $ docker-compose down

İsa

Software Engineer