Öğretici: GitHub ve Docker kullanarak Jenkins işlem hattı oluşturma
Önemli
Birçok Azure hizmeti Jenkins eklentilerine sahiptir. Bu eklentilerden bazıları 29 Şubat 2024 itibarıyla destekten çıkarılacaktır. Azure CLI, Jenkins'i Azure hizmetleriyle tümleştirmenin şu anda önerilen yoludur. Daha fazla bilgi için Azure için Jenkins eklentileri makalesine 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 öğreticide Azure Cloud Shell içindeki CLI sürekli olarak en son sürüme güncelleştirilmektedir. 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 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>
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 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.
- 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
- Gerekirse jenkins'te 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'ı 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 girin
http://<publicIps>:8080/github-webhook/
. 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 için Yalnızca gönderme olayı'nı seçin.
- Etkin'i işaretli olarak ayarlayın.
- Web kancası ekle'ye tıklayın.
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ünden GitHub projesi’ni seçip çatalı oluşturulan deponuzun URL’sini
https://github.com/cynthn/nodejs-docs-hello-world
şeklinde girin - Kaynak kodu yönetimi bölümünden Git’i seçip çatalı oluşturulan deponuzun .git URL’sini
https://github.com/cynthn/nodejs-docs-hello-world.git
ş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
echo "Test"
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:
Ş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:
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.