Bölüm2: Aws Lightsail & Spring Boot & Jenkins & Github
Bölüm1 ‘de aws lightsail ve jenkins üzerinde durmuştuk ve lightsail üzerinde sanal sunucu oluşturmuştuk, şimdi kurulum aşamalarına geçebiliriz.
Bölüm2'de işleyeceklerimizi listeleyecek olursak,
- spring boot projesi için gerekli yapılandırmalar
- jdk kurulum
- maven kurulum
- jenkins kurulum
- jenkins & github deploy
- uygulama service olarak yapılandırma
ana başlıklarında bu bölümü sonlandıracağız.
Kurulumlara geçmeden önce görsellerde göreceğiniz komutlara gist üzerinden erişebilirsiniz.
Spring Boot Yapılandırma
Spring Boot projemizin pom.xml dosyasında aşağıdaki maven configürasyonu eklemeliyiz.
Projemizi ilerleyen zamanda service olarak çalıştıracağız ve jenkins üzerinden otomatik eski service stop, yeni service start işlemlerini manuel yapmamak için
deploy.sh dosyası oluşturacağız.
deploy.sh üzerinden service stop/start bilgilerini console ekranına basması için echo komutlarını da kullanacağız.
deploy.sh dosyamız aşağıdaki komutları barındıracak.
Blog’da kullanacağımız örnek projem github üzerinde ve buradan erişebilirsiniz.
Jdk Kurulum
Jenkins java ile yazılmış opensource proje olduğu için jdk yüklememiz gerekiyor.
Ek olarak spring boot projemizi deploy edeceğimizden dolayı da jdk yüklememiz gerekiyor.
Sunucuda bulunan paketleri update edelim.
openJDK 8 kurulumunu yapalım.
jdk version kontrolü yapalım, jdk sürüm bilgilerini verecektir.
jdk kurulumunu başarıyla tamamladık.
Maven Kurulum
Spring boot projemizi build edeceğimiz için maven kurulumu yapmamız gerekiyor.
maven kurulumunu yapalım.
maven versiyon kontrolü yapalım, maven bilgilerini verecektir.
maven kurulumunu da başarıyla tamamladık.
Jenkins Kurulum
Jenkins için güvenlik anahtarı indirelim.
Jenkins kaynaklarını apt’ye ekleyelim.
Sunucudaki paketleri güncelleyelim.
Jenkins’i indirelim.
Jenkins & Github
Jenkins default olarak 8080 portunda çalışmaktadır.
Browser üzerinden erişmemiz için ilk olarak Aws Lightsail üzerinden Networking sekmesine gelip, 8080 portunu açmamız gerekmektedir.
Spring boot projemizde 8081 portunda çalışacağı için 8081 portunuda dışarıya açmamız gerekmektedir.
publicip:8080 adresine giriş yapalım ve aşağıdaki görsel ile karşılacağız, burada verilen /var.. ile başlayan path’i kopyalayım.
Aşağıda görseldeki komutu yazdığımızda çıkan key’i Administrator password alanına kopyalayıp yapıştıralım ve continue butonuna basalım.
Karşımıza çıkan ekranda install suggested’ tıklayalım gerekli kurulumları yapsın.
Daha sonra karşımıza çıkan ekranda username, password belirleyelim ve Save & Continue diyelim.
Create new jobs diyerek github ayarlamalarını yapalım.
Job için isim verip, freestyles seçeneğini seçip Ok butonuna basalım.
Github project seçeneğini işaretleyip github projemizin url’ni veriyoruz.
Örnek olarak benim jenkins için oluşturduğum projeye buradan erişebilirsiniz.
Git alanını işaretleyip burayada clone’layacağımız repository’imizi yazıyoruz.
Private repository ise Credentials’dan kullanıcı ekleyebilirsiniz.
Jenkins hangi branch üzerinde çalışacağını belirtiyoruz, ben master branch seçtim.
Ayarlamalarımıza devam edelim,
Build periodically ile jenkins projemizi hangi zaman aralıklarıyla github üzerinden güncelleyip işlemleri tekrarlaması gerektiğini belirtiyoruz.
Örnek olması açısından 15 dakikada bir olarak seçtim.
Eğer her dakika yapmasını isterseniz Schedule alanına * * * * * koymanız yeterli olacaktır.
Build Environments ile bir önceki workspace silmesini etkinleştiriyoruz.
Build alanında Add Build Step diyerek clean install yazıyoruz.
Böylelikle projemiz derlenip jar dosyası oluşturulacak.
Şimdilik Jenkins ile işimiz bukadar.
Fakat bu alana ilk deploy’dan sonra deploy.sh yapılandırması için tekrar dönüş yapacağız.
Save diyerek kaydedelim.
15 dakika beklememek için
Build Now yazısına tıklayalım.
İstersek build ederken hata olursa hataları görmek için console’a erişebiliriz. Erişmek için, Build numarasına tıklayarak erişebiliriz.
Görüldüğü üzere başarıyla build işlemi bitti.
Uygulamayı Service Olarak Ayarlama
Jenkins build işlemi gerçekleştirdiğinde /var/lib/jenkins/workspace dizini altında projelerimizi barındırmaktadır.
Service olarak çalıştırmak istediğimiz .jar dosyamızın dizinini verdik ve process tanımladık.
Sıra systemd service tanımlamamıza geldi, ilk önce görselde belirtilen dizine gidelim.
Hatırlarsanız /etc/init.d/ dizini altına api adını vermiştik dosyamıza, şimdi ise api.service uzantılı dosya yaratacağız.
api.service dosyamızın içerisine girelim ve konfigürasyonlarını yazalım.
Dosya içerisine girdimizde yazamıyorsak ‘i’ tuşuna basarak insert işlemini etkinleştirebiliriz.
İşlemimiz bittikten sonra esc tuşuna basıp :wq komutu ile write and quit işlemini gerçekleştirebiliriz.
Şimdi oluşturduğumuz api service start edip sonra status’a bakalım,
Bu işlemde başarılı şekilde sonuçlandığı için son aşamaya geçebiliriz artık,
Browser üzerinden publicip:8081/hello adresine gidelim,
Görüldüğü üzere uygulamamız çalışıyor 🙂
Jenkins Kullanıcısına deploy.sh için Erişim Hakkı Verme
api.service oluştururken User=jenkins demiştik, jenkins kurulduğunda jenkins adında user oluşturulur,
sh dosyasını jenkins kullanıcısı çalıştıracağına için izin vermemiz gerekmektedir.
/etc/sudoers içerisine giriyoruz.
root kullanıcısın altında jenkins kullanıcısına yetkilendirme yapmış oldu.
Esc’ye basıp ctrl + o ile kaydedip çıkabiliriz.
Jenkins Üzerinden deploy.sh Tetikleme
Son işlem olarak, hatırlarsanız deploy.sh dosyası oluşturmuştuk, sunucu üzerinde service oluşturduğumuz için deploy.sh konfigürasyonunuda yaptığımızda,
jenkins build işlemi gerçekleştirdiğinde eski çalışan service stop, build ettiği service start işlemlerini de otomatik olarak gerçekleştirmiş olacak.
Bunun için,
Jenkins üzerinden job’ımıza gelip configüre yazısına tıklayalım,
Add Build Step ile Execute Shell ekleyelim ve sh deploy.sh shell command girelim,
Böylelikle deploy.sh dosyamızdaki komutlar çalışacak ve service stop, start edilerek yeni kodlarımız çalışmış olacaktır.
Örnek olarak hello jenkins test1 -> hello jenkins test2 olarak güncelleyip github’a pushladım.
15 dakika beklememek için Build Now yazısına tıkladım,
Ayrıca console output’dan da yapılan işlemleri/çıkacak hataları takip edebiliriz, gördüğümüze üzere service stop, start ederek güncel kodumuz service olarak çalışmaya başlamaktadır. 🙂
publicip:8081/hello adresine gidecek olursak,
NOT: SUNUCU SİLME
Sunucuyu silmek istediğimizde,
Lightsail üzerinden delete alanına gelip, delete butonu ile silebilliriz.
Ek olarak, eğer projemiz ile jenkins farklı sunucular üzerinde çalışıyorsa jenkins ssh deploy konusunu araştırıp jenkins üzerinden farklı sunuculara da deploy yapabilirsiniz.
Jenkins hakkında söyleyeceklerim bu kadar 🙂
Diğer yazılarımda görüşmek üzere,
Sağlıcakla kalın 🙂
Originally published at http://blog.hkdemircan.com on October 17, 2019.