Aracılığıyla paylaş


Öğretici: GitHub ve Docker kullanarak Jenkins işlem hattı oluşturma

Önemli

Birçok Azure hizmeti Jenkins eklentilerine sahip olsa da, bu eklentilerin çoğu 29 Şubat 2024 itibarıyla destek sona erdi. Azure CLI, Jenkins'i Azure hizmetleriyle tümleştirmenin şu anda önerilen yoludur. Daha fazla bilgi için Azureiçin Jenkins eklentileri makalesine bakın.

Uygulama geliştirmenin derleme ve test aşamasını otomatikleştirmek için sürekli tümleştirme ve dağıtım (CI/CD) işlem hattı kullanabilirsiniz. Bu öğreticide, Azure VM'de aşağıdakilerin nasıl yapılacağını içeren bir CI/CD işlem hattı oluşturacaksınız:

  • Jenkins VM oluşturma
  • Jenkins'i yükleme ve yapılandırma
  • GitHub ile Jenkins arasında webhook entegrasyonu oluşturma
  • GitHub taahhütlerinden Jenkins derleme işleri oluşturma ve tetikleme
  • Uygulamanız için Docker görüntüsü oluşturma
  • GitHub commitlerinin yeni Docker görüntüsü oluşturup çalışan uygulamayı güncellediğini doğrulama

Bu öğretici, sürekli olarak en son sürüme güncellenen Azure Cloud Shell içindeki CLI'yi kullanır. Cloud Shell'i açmak için herhangi bir kod bloğunun üst kısmından Deneyin'i seçin.

CLI'yi yerel olarak yükleyip kullanmayı tercih ederseniz bu öğretici için Azure CLI 2.0.30 veya sonraki bir sürümünü çalıştırmanız gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. Azure CLI'yı yükleme.

Jenkins örneği oluşturma

İlk önyüklemede Linux sanal makinesini özelleştirme hakkında önceki bir öğreticide, cloud-init ile VM özelleştirmesini otomatikleştirmeyi öğrendinsiniz. Bu öğreticide vm'ye Jenkins ve Docker yüklemek için cloud-init dosyası kullanılır. Jenkins, sürekli tümleştirmeyi (CI) ve sürekli teslimi (CD) etkinleştirmek için Azure ile sorunsuz bir şekilde tümleşen popüler bir açık kaynak otomasyon sunucusudur. Jenkins'i kullanma hakkında daha fazla öğretici için bkz. Azure hub'ında Jenkins.

Şu anki kabuğunuzda cloud-init-jenkins.txt adlı bir dosya oluşturun, ardından aşağıdaki yapılandırmayı yapıştırın. Örneğin, dosyayı yerel makinenizde değil Cloud Shell’de oluşturun. Dosyayı oluşturmak ve kullanılabilir düzenleyicilerin listesini görmek için girin sensible-editor cloud-init-jenkins.txt . Başta birinci satır olmak üzere cloud-init dosyasının tamamının doğru bir şekilde kopyalandığından emin olun:

#cloud-config
package_upgrade: true
write_files:
  - path: /etc/systemd/system/docker.service.d/docker.conf
    content: |
      [Service]
        ExecStart=
        ExecStart=/usr/bin/dockerd
  - path: /etc/docker/daemon.json
    content: |
      {
        "hosts": ["fd://","tcp://127.0.0.1:2375"]
      }
runcmd:
  - apt install openjdk-8-jre-headless -y
  - wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
  - sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
  - apt-get update && apt-get install jenkins -y
  - curl -sSL https://get.docker.com/ | sh
  - usermod -aG docker azureuser
  - usermod -aG docker jenkins
  - service jenkins restart

VM oluşturabilmek için önce az group create ile bir kaynak grubu oluşturun. Aşağıdaki örnek, eastus konumunda myResourceGroupJenkins adlı bir kaynak grubu oluşturur:

az group create --name myResourceGroupJenkins --location eastus

Şimdi ile az vm createkomutunu kullanarak bir VM oluşturun. --custom-data parametresini kullanarak cloud-init yapılandırma dosyanızı iletin. Dosyayı mevcut çalışma dizininizin dışına kaydettiyseniz cloud-init-jenkins.txt tam yolunu belirtin.

az vm create --resource-group myResourceGroupJenkins \
    --name myVM \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init-jenkins.txt

VM'nin oluşturulması ve yapılandırılması birkaç dakika sürer.

Web trafiğinin VM'nize ulaşmasına izin vermek için az vm open-port komutunu kullanarak Jenkins trafiği için 8080 numaralı bağlantı noktasını ve örnek bir uygulamayı çalıştırmak için kullanılan Node.js uygulaması için 1337 numaralı bağlantı noktasını açın:

az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 8080 --priority 1001
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 1337 --priority 1002

Jenkins’i yapılandırma

Jenkins örneğine erişmek için VM'nizin genel IP adresini alın:

az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv

Güvenlik amacıyla, Jenkins yüklemesini başlatmak için VM'nizdeki bir metin dosyasında depolanan ilk yönetici parolasını girmeniz gerekir. Vm'nize SSH için önceki adımda elde edilen genel IP adresini kullanın:

ssh azureuser@<publicIps>

Jenkins'in şu komutu kullanarak service çalıştığını doğrulayın:

$ service jenkins status
● jenkins.service - LSB: Start Jenkins at boot time
   Loaded: loaded (/etc/init.d/jenkins; generated)
   Active: active (exited) since Tue 2019-02-12 16:16:11 UTC; 55s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 0 (limit: 4103)
   CGroup: /system.slice/jenkins.service

Feb 12 16:16:10 myVM systemd[1]: Starting LSB: Start Jenkins at boot time...
...

Jenkins kurulumunuz için initialAdminPassword öğesini inceleyin ve kopyalayın:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Eğer dosya henüz mevcut değilse, cloud-init'in Jenkins ve Docker kurulumunu tamamlaması için birkaç dakika daha bekleyin.

Şimdi bir web tarayıcısı açın ve adresine http://<publicIps>:8080gidin. İlk Jenkins kurulumunu şu şekilde tamamlayın:

  • Yüklenecek eklentileri seç'i seçin
  • Üst kısımdaki metin kutusunda GitHub araması yapın. GitHub kutusunu işaretleyin ve yükle'yi seçin
  • İlk yönetici kullanıcıyı oluşturun. Yönetici gibi bir kullanıcı adı girin ve kendi güvenli parolanızı girin. Son olarak, bir tam ad ve e-posta adresi yazın.
  • Kaydet ve Bitir seçin
  • Jenkins hazır olduğunda Jenkins'i kullanmaya başla'yı seçin
    • Jenkins'i kullanmaya başladığınızda web tarayıcınız boş bir sayfa görüntülüyorsa Jenkins hizmetini yeniden başlatın. SSH oturumunuzda yazın sudo service jenkins restart, ardından web tarayıcınızı yenileyin.
  • Gerekirse jenkins'te oluşturduğunuz kullanıcı adı ve parolayla oturum açın.

GitHub webhook oluştur

GitHub ile tümleştirmeyi yapılandırmak için Azure örnekleri deposundan Node.js Hello World örnek uygulamasını açın. Depoyu kendi GitHub hesabınıza forklamak için sağ üst köşedeki Fork düğmesini seçin.

Oluşturduğunuz forkun içinde bir webhook oluşturun.

  • Ayarlar'ı ve ardından sol taraftaki Web kancaları'nı seçin.
  • Web kancası ekle'yi seçin ve filtre kutusuna Jenkins yazın.
  • Yük URL'si için http://<publicIps>:8080/github-webhook/ adresini girin. Sondaki / öğesini eklediğinizden emin olun
  • İçerik türü içinapplication/x-www-form-urlencoded öğesini seçin.
  • Bu web kancasını tetiklemek istediğiniz olaylar için Yalnızca gönderme olayı'nı seçin.
  • Etkin seçeneğini işaretli hale getirin.
  • Web kancası ekle'ye tıklayın.

Çatallanmış deponuza GitHub web kancası ekleme

Jenkins'de iş oluştur

Jenkins'in GitHub'da kod işleme gibi bir olaya yanıt vermesini sağlamak için bir Jenkins işi oluşturun. Kendi GitHub çatalınız için URL'leri kullanın.

Jenkins web sitenizde giriş sayfasından Yeni iş oluştur'u seçin:

  • İş adı olarak HelloWorld girin. Serbest stil projesi'ni ve ardından Tamam'ı seçin.
  • Genel bölümünün altında GitHub projesi'ni seçin ve çatallanmış depo URL'nizi girin, örneğinhttps://github.com/cynthn/nodejs-docs-hello-world
  • Kaynak kodu yönetimi bölümünde Git'i seçin, çatallanmış deponuz .git URL'sini girin, örneğinhttps://github.com/cynthn/nodejs-docs-hello-world.git
  • Derleme Tetikleyicileri bölümünde GITscm yoklaması için GitHub kanca tetikleyicisi'ni seçin.
  • Derleme bölümünde Derleme adımı ekle'yi seçin. Kabuğu çalıştır seçin, ve komut penceresine echo "Test" girin.
  • İşler penceresinin alt kısmındaki Kaydet'i seçin.

GitHub tümleştirmeyi test edin

Jenkins ile GitHub tümleştirmesini test etmek için çatalınıza bir değişiklik yapın.

GitHub web kullanıcı arabirimine dönün, çatallanmış deponuzu seçin ve ardından index.js dosyasını seçin. 6. satırda okunacak şekilde bu dosyayı düzenlemek için kalem simgesini seçin:

response.end("Hello World!");

Değişikliklerinizi işlemek için alttaki Değişiklikleri işle düğmesini seçin.

Jenkins'te, iş sayfanızın sol alt köşesindeki Derleme geçmişi bölümünde yeni bir derleme başlatılır. Derleme numarası bağlantısını seçin ve sol taraftaki Konsol çıkışı'nı seçin. Kodunuz GitHub'dan çekilirken ve derleme eylemi iletiyi Test konsola çıkarırken Jenkins'in uyguladığı adımları görüntüleyebilirsiniz. GitHub'da her işleme yapıldığında web kancası Jenkins'e ulaşır ve bu şekilde yeni bir derleme tetikler.

Docker görüntüsü oluşturma tanımı

GitHub işlemelerinize göre çalışan Node.js uygulamasını görmek için, uygulamayı çalıştırmak için bir Docker görüntüsü oluşturalım. Görüntü, uygulamayı çalıştıran kapsayıcının nasıl yapılandırıldığını tanımlayan bir Dockerfile'dan oluşturulur.

VM'nize SSH bağlantısından, önceki adımda oluşturduğunuz işin adını taşıyan Jenkins çalışma alanı dizinine geçin. Bu örnekte buna HelloWorld adı verilmişti.

cd /var/lib/jenkins/workspace/HelloWorld

Aşağıdaki içeriği kullanarak sudo sensible-editor Dockerfile bu çalışma alanı dizininde bir dosya oluşturun ve yapıştırın. Dockerfile dosyasının tamamının, özellikle de ilk satırın doğru kopyalandığından emin olun:

FROM node:alpine

EXPOSE 1337

WORKDIR /var/www
COPY package.json /var/www/
RUN npm install
COPY index.js /var/www/

Bu Dockerfile, Alpine Linux kullanarak temel Node.js görüntüsünü kullanır, Hello World uygulamasının çalıştığı 1337 numaralı bağlantı noktasını kullanıma sunar, ardından uygulama dosyalarını kopyalar ve başlatır.

Jenkins yapı kuralları oluşturma

Önceki bir adımda, konsola bir ileti veren temel bir Jenkins derleme kuralı oluşturdunuz. Dockerfile'ımızı kullanmak ve uygulamayı çalıştırmak için derleme adımını oluşturalım.

Jenkins örneğinize döndüğünüzde, önceki adımda oluşturduğunuz işi seçin. Sol taraftan Yapılandır'ı seçin ve Yapı bölümüne gitmek için aşağı kaydırın.

  • Mevcut echo "Test" derleme adımınızı kaldırın. Mevcut yapı adımı kutusunun sağ üst köşesindeki kırmızı çarpıyı seçin.

  • Derleme adımı ekle'yi ve ardından Kabuğu yürüt'i seçin

  • Komut kutusuna aşağıdaki Docker komutlarını girin ve Kaydet'i seçin:

    docker build --tag helloworld:$BUILD_NUMBER .
    docker stop helloworld && docker rm helloworld
    docker run --name helloworld -p 1337:1337 helloworld:$BUILD_NUMBER node /var/www/index.js &
    

Docker derleme adımları bir görüntü oluşturur ve görüntülerin geçmişini koruyabilmeniz için bu görüntüyü Jenkins derleme numarasıyla etiketler. Uygulamayı çalıştıran mevcut kapsayıcılar durdurulur ve kaldırılır. Ardından görüntü kullanılarak yeni bir kapsayıcı başlatılır ve GitHub'daki en son işlemeleri temel alarak Node.js uygulamanızı çalıştırır.

İşlem hattınızı test edin

Bütün işlem hattını çalışırken görmek için GitHub deponuzda çatalladığınız index.js dosyasını yeniden düzenleyin ve Değişiklikleri işle seçeneğini seçin. Jenkins'te GitHub için web kancasını temel alan yeni bir iş başlatılır. Docker görüntüsünü oluşturmak ve uygulamanızı yeni bir kapsayıcıda başlatmak birkaç saniye sürer.

Gerekirse VM'nizin genel IP adresini yeniden alın:

az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv

Bir web tarayıcısı açın ve girin http://<publicIps>:1337. Node.js uygulamanız görüntülenmiş olup, GitHub dalınızdaki en son commit'leri aşağıdaki gibi yansıtmaktadır:

Node.js uygulamasını çalıştırma

Şimdi GitHub'daki index.js dosyasında başka bir düzenleme yapın ve değişikliği işleyin. Jenkins'te işin tamamlanması için birkaç saniye bekleyin, ardından uygulamanızın güncelleştirilmiş sürümünün yeni bir kapsayıcıda çalıştığını görmek için web tarayıcınızı aşağıdaki gibi yenileyin:

Başka bir GitHub işlemesi sonrasında Node.js uygulamasını çalıştırma

Sonraki Adımlar

Bu öğreticide GitHub'ı her kod işlemesinde bir Jenkins derleme işi çalıştıracak ve ardından uygulamanızı test etmek için bir Docker kapsayıcısı dağıtacak şekilde yapılandırmıştınız. Nasıl yapılacağını öğrendinsiniz:

  • Jenkins VM oluşturma
  • Jenkins'i yükleme ve yapılandırma
  • GitHub ile Jenkins arasında webhook entegrasyonu oluşturma
  • GitHub taahhütlerinden Jenkins derleme işleri oluşturma ve tetikleme
  • Uygulamanız için Docker görüntüsü oluşturma
  • GitHub commitlerinin yeni Docker görüntüsü oluşturup çalışan uygulamayı güncellediğini doğrulama

Jenkins'i Azure DevOps Services ile tümleştirme hakkında daha fazla bilgi edinmek için sonraki öğreticiye geçin.