- Otomasyon
- İşleri otomatikleştirmek
- Orkestrasyon
- Birden fazla sunucuda aynı anda otomasyon
- Kubernetes
- Config Management
- Inventory Management
- Iterative Management
- Continuous Integration
- Continuous Deployment
- Continuous Delivery
- Continuous Development
- Infrastructure as Code
- docker kurulumu
sudo apt install docker.io docker-compose -y
- jenkins için ortamı hazırlamak
docker network create cicd
docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 --network cicd --name jenkins jenkins/jenkins:lts
- Biz sunucuya girmeden sunucuya sızmaya çalışan biri giremesin diye initial password oluşturuyoruz.
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- Ayağa kaldırıyoruz
docker run -d --name demoserver --network cicd guray/weaksshd:0.2
hostname: demoserver username: sshuser password: myweakpassword
serverAliveInterval clientAliveInterval
- parameters: Buildlere parametreler ekleyebiliriz
- throttle builds: Ard arda çalıştırmayı engelleme
- disable: Kullanılmaması için disabled edebiliriz
- concurrent build: Eş zamanlı build çalıştırma
Buildleri manuel olarak çalıştırabildiğimiz gibi farklı yöntemlerle de çalıştırabiliriz. Belirlenen bir görevin sonunda, bir hata sonucunda, github üzerinden veya periyodik olarak da çalıştırabiliyoruz.
cron ile periyodik trigger örneği: MINUTE HOUR DAY_OF_MONTH MONTH DAY_OF_WEEK
Her sene 6.ayın 5'inde 3:50'de çalıştır *: haftanın her günü
TZ=Europe/Istanbul
50 3 5 6 *
Pre-build Script Build çalışmadan önce script çalıştırır.
Post-build Script Build sonrası script çalıştırır.
Soru
Build çalışmadan önce /etc altındaki dosyaları .tar.gz formatında kopyalayıp backup_etc_{gün}_{ay}_{yıl}.tar.gz
adıyla kaydeden script'i yazın.
tar czf backup_etc_$(date '+%d_%m_%Y_%H_%M').tar.gz /etc
Bu hata sonucu scriptin patlamaması için komutu aşağıdaki şekilde düzenleyebiliriz.
tar czf backup_etc_$(date '+%d_%m_%Y_%H_%M').tar.gz /etc || echo ''
veya
tar czf backup_etc_$(date '+%d_%m_%Y_%H_%M').tar.gz /etc || /bin/true
Build versiyonlama problemi ve kopyalama zorluğu sebebiyle bu işleri kod ile yapma gereksinimi yüzünden kullanılır.
Pipeline script groovy diline benzer bir yapıdadır.
declarative pipeline
- pipeline ile başlar
- Daha modern kabul edilir
- Belli başlı komutları çalıştırır
scripted pipeline
- node ile başlar
- groovy programlama dili ile kod yazabiliyoruz
- Build Kod build edilir.
- Statik Kod Analizi Belli araçlar ile kodun içerisindeki güvenlik açıklarını, performans iyileştirme önerilerini vs bulur.
- Unit Test Kodun parçalarının kod ile test edilmesi. Bir kod parçasını test etmek için kullanılır.
- Packaging Kod paketlenerek çalışır hale getirilir.
- Functional Test Paket mockup servisler ile test edilir. Gerçek bir servise veya database'e istek atmıyoruz. İdeal şekilde ve sınırsız hızlı response dönen mockuplar ile test yapıyoruz.
- Integration Test Functional test ile farkı paket gerçek servis ve veritabanları ile test edilir. Gecikmelerle ve hatalarla testin geçip geçmediğine bakılır.
- E2E Test Selenium ile kullanıcı arayüzü ile test edilir.
- Prod Kod canlıya alınır.
Unix sistemlerde exit-status 0 başarılı anlamına gelir. 0 dışındaki her şey hatadır.
-
Linux dağıtımı bilgileri
cat /etc/os-release
-
Docker yetki komutu
sudo usermod -aG docker $USER
-
Son çalışan komutun status bilgisi
echo $?
- jenkins
- figlet
- clean workspace plugin
- cron
- pipeline as code
- crontab.guru
- Selenium Python
- Jenkins için örnek birkaç tutorial: