öğretici: GitHub ve docker kullanarak jenkins işlem hattı oluşturma

Önemli

Birçok Azure hizmetine Jenkins eklentileri vardır. Bu eklentilerin bazıları 29 Şubat 2024 itibariyle destek dışı olacaktır. Azure CLı, Jenkins 'i Azure hizmetleriyle tümleştirmeye yönelik Şu anda önerilen yoldur. Daha fazla bilgi için Azure Için Jenkins eklentilerimakalesine bakın.

Uygulama geliştirme sürecinin derleme ve test aşamasını otomatikleştirmek için bir sürekli tümleştirme ve dağıtım (CI/CD) işlem hattı kullanabilirsiniz. Bu öğreticide, aşağıdakileri öğrenerek bir Azure sanal makinesinde CI/CD işlem hattı oluşturursunuz:

  • Jenkins sanal makinesi oluşturma
  • Jenkins’i yükleme ve yapılandırma
  • GitHub ile Jenkins arasında web kancası tümleştirmesi oluşturma
  • GitHub işlemelerinden Jenkins derleme işleri oluşturma ve tetikleme
  • Uygulamanız için bir Docker görüntüsü oluşturma
  • GitHub işlemelerinin yeni Docker görüntüsü oluşturduğunu ve çalışmakta olan uygulamayı güncelleştirdiğini doğrulama

Bu öğretici, en son sürüme sürekli olarak güncellenen Azure Cloud Shelliçindeki CLI 'yi kullanır. Cloud Shell açmak için herhangi bir kod bloğunun en üstünden 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 gerekirse, bkz. Azure CLI yükleme.

Jenkins örneği oluşturma

İlk önyüklemede Linux sanal makinelerini özelleştirme konulu önceki bir öğreticide, cloud-init ile VM özelleştirmeyi nasıl otomatikleştirebileceğinizi öğrendiniz. Bu öğreticide, bir VM’ye Jenkins ve Docker yüklemek için cloud-init dosyası kullanılır. Jenkins, sürekli tümleştirme (CI) ve sürekli teslimi (CD) etkinleştirmek için Azure ile sorunsuz bir şekilde tümleştirilen popüler bir açık kaynak otomasyon sunucusudur. Jenkins kullanmayla ilgili diğer öğreticiler için bkz. Azure’da Jenkins merkezi.

Geçerli kabuğunuzda cloud-init-jenkins.txt adlı bir dosya oluşturup 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 sensible-editor cloud-init-jenkins.txt adını girin. 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 örnekte, eastus konumunda myResourceGroupJenkins adlı bir kaynak grubu oluşturulur:

az group create --name myResourceGroupJenkins --location eastus

Şimdi az vm create ile bir VM oluşturun. --custom-data parametresini kullanarak cloud-init yapılandırma dosyanızı geçirin. Dosyayı geçerli çalışma dizininizin dışına kaydettiyseniz cloud-init-jenkins.txt dosyasının 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

Sanal makinenin oluşturulup yapılandırılması birkaç dakika sürer.

Web trafiğinin sanal makinenize ulaşmasına izin vermek üzere az vm open-port komutunu kullanarak Jenkins trafiği için 8080 bağlantı noktasını, örnek uygulama çalıştırmak amacıyla kullanılacak Node.js uygulaması için de 1337 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ğinize erişmek için VM’nizin genel IP adresini edinin:

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

Güvenlik nedeniyle, Jenkins yüklemesini başlatmak için VM’nizde bir metin dosyasında saklanan ilk yönetici parolasını girmeniz gerekir. Önceki adımda edinilen genel IP adresini kullanarak VM’niz ile SSH bağlantısı kurun:

ssh azureuser@<publicIps>

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

$ 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 yüklemenizin initialAdminPassword değerini görüntüleyin ve kopyalayın:

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

Dosya henüz kullanılamıyorsa cloud-init tarafından Jenkins ve Docker yüklemesinin tamamlanması için birkaç dakika daha bekleyin.

Şimdi bir web tarayıcısı açıp http://<publicIps>:8080 adresine gidin. Aşağıdaki adımları uygulayarak ilk Jenkins kurulumunu tamamlayın:

  • Yüklenecek eklentileri Seç ' i seçin
  • Üstteki metin kutusundan GitHub araması yapın. GitHub kutusunu işaretleyin ve Yükle’yi seçin
  • İlk yönetici kullanıcıyı oluşturun. admin gibi bir kullanıcı adı girin ve sonra kendi güvenli parolanızı belirtin. Son olarak, bir tam ad ve e-posta adresi yazın.
  • Kaydet ve Bitir’i seçin
  • Jenkins hazır olduktan sonra Jenkins kullanmaya başla’yı seçin
    • Jenkins kullanmaya başladığınızda web tarayıcınız boş bir sayfa görüntülerse, Jenkins hizmetini yeniden başlatın. SSH oturumundan sudo service jenkins restart yazın ve web tarayıcınızı yenileyin.
  • Gerekirse, Jenkins 'de oluşturduğunuz Kullanıcı adı ve parolayla oturum açın.

GitHub web kancası oluşturma

GitHub tümleştirmesini yapılandırmak için Azure örnek deposundan Node.js Hello World örnek uygulamasını açın. Depo için GitHub hesabınızda çatal oluşturmak üzere sağ üst köşedeki Fork (Çatal Oluştur) düğmesini seçin.

Oluşturduğunuz çatalın içinde bir web kancası oluşturun:

  • Ayarlar' yi seçin ve ardından sol taraftaki web kancaları ' nı seçin.
  • Web kancası Ekle' yi seçin ve ardından, filtre kutusuna Jenkins yazın.
  • Yük URL 'siiçin girin . Sondaki / karakterini eklemeyi unutmayın
  • İçerik türüiçin Application/x-www-form-urlencodedöğesini seçin.
  • Bu Web kancasını tetiklemek istediğiniz olayları seçin?yalnızca anında iletme olayını seçin.
  • Etkin olarak işaretlendi olarak ayarlayın.
  • Web kancası Ekle' ye tıklayın.

GitHub web kancasını çatalı oluşturulan deponuza ekleyin

Jenkins işi oluşturma

Jenkins’in GitHub’daki kod işleme gibi olaylara 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 adını girin. Serbest tarzda proje’yi seçip Tamam’ı seçin.
  • genel bölümünde, GitHub proje ' yi seçin ve
  • Kaynak kodu yönetimi bölümünden Git’i seçip çatalı oluşturulan deponuzun .git URL’sini şeklinde girin
  • Derleme Tetikleyicileri bölümünden GITScm yoklaması için GitHub kanca tetikleyicisi’ni seçin.
  • Derleme bölümünden Derleme adımı ekle’yi seçin. Kabuğu yürüt’ü seçin ve komut penceresine ifadesini girin.
  • İşler penceresinin en altından Kaydet’i belirleyin.

GitHub tümleştirmesini test etme

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

GitHub web kullanıcı arabirimine dönerek çatalı oluşturulan deponuzu seçip index.js dosyasını seçin. Kalem simgesini seçerek bu dosyayı 6. satırda şu yazacak şekilde düzenleyin:

response.end("Hello World!");

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

Jenkins’de işinizin bulunduğu sayfanın sol alt köşesindeki Derleme geçmişi bölümünün altında yeni bir derleme başlar. Derleme numarası bağlantısını seçip sol taraftan Konsol çıktısı’nı seçin. Kodunuz GitHub’dan çekilirken ve derleme eylemi tarafından konsola çıktı olarak Test mesajı iletilirken Jenkins’in uyguladığı adımları görebilirsiniz. GitHub’da her işleme gerçekleştirildiğinde web kancası bu şekilde Jenkins’e ulaşır ve yeni bir derleme tetikler.

Docker derleme görüntüsünü tanımlama

Node.js uygulamasının GitHub işlemelerinize bağlı olarak çalışmasını görmek için uygulamayı çalıştırmaya yönelik 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ılacağını tanımlayan bir Dockerfile’dan oluşturulur.

VM’niz ile kurulan SSH bağlantısından, önceki adımlardan birinde oluşturduğunuz işin adını verdiğiniz Jenkins çalışma dizinine geçin. Bu örnekte HelloWorld olarak adlandırılmıştı.

cd /var/lib/jenkins/workspace/HelloWorld

sudo sensible-editor Dockerfile ile bu çalışma alanı dizininde bir dosya oluşturun ve aşağıdaki içeriği yapıştırın. Başta birinci satır olmak üzere Dockerfile’ın tamamının doğru bir şekilde 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 kullanan temel Node.js görüntüsünü kullanır, Hello World uygulamasının üzerinde çalıştığı 1337 bağlantı noktasını kullanıma açar ve sonra uygulama dosyalarını kopyalayıp uygulamayı başlatır.

Jenkins derleme kuralları oluşturma

Önceki adımlardan birinde, çıktı olarak konsola mesaj gönderen temel bir Jenkins derleme kuralı oluşturmuştunuz. Dockerfile’ımızı kullanmak için derleme adımını oluşturalım ve uygulamayı çalıştıralım.

Jenkins örneğine dönerek önceki adımlardan birinde oluşturduğunuz işi seçin. Sol taraftan Yapılandır’ı seçin ve aşağı kaydırarak Derleme bölümüne gidin:

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

  • Derleme adımı ekle’yi seçip Kabuğu yürüt’ü seçin

  • Komut kutusuna aşağıdaki Docker komutlarını girip 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 tutabilmeniz için bunu Jenkins derleme numarasıyla etiketler. Uygulamayı çalıştıran mevcut kapsayıcılar varsa bunlar durdurulup kaldırılır. Daha sonra, yeni bir kapsayıcı görüntüyü kullanmaya başlar ve GitHub’daki en son işlemeleri temel alarak Node.js uygulamanızı çalıştırır.

İşlem hattınızı test etme

İşlem hattının tamamını iş başında görmek için çatalı oluşturulan GitHub deponuzdaki index.js dosyasını yeniden düzenleyin ve Değişikliği işle’yi seçin. Jenkins’de GitHub’a yönelik web kancasını temel alan yeni bir iş başlatılır. Docker görüntüsünün oluşturulup uygulamanızın yeni bir kapsayıcıda başlatılması birkaç saniye alır.

Gerekirse VM’nizin genel IP adresini yeniden edinin:

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

Bir web tarayıcısı açıp http://<publicIps>:1337 adresini girin. Node.js uygulamanız görüntülenir ve GitHub çatalınızdaki son işlemeleri aşağıdaki gibi gösterir:

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

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

Başka bir GitHub işlemesinden sonra 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 sonra uygulamanızı test etmek için bir Docker kapsayıcısı dağıtacak şekilde yapılandırdınız. Şunları öğrendiniz:

  • Jenkins sanal makinesi oluşturma
  • Jenkins’i yükleme ve yapılandırma
  • GitHub ile Jenkins arasında web kancası tümleştirmesi oluşturma
  • GitHub işlemelerinden Jenkins derleme işleri oluşturma ve tetikleme
  • Uygulamanız için bir Docker görüntüsü oluşturma
  • GitHub işlemelerinin yeni Docker görüntüsü oluşturduğunu ve çalışmakta olan uygulamayı güncelleştirdiğini doğrulama

Jenkins’i Azure DevOps Services ile tümleştirme hakkında daha fazla bilgi edinmek için bir sonraki öğretici ilerleyin.