Bu proje, Spring Boot tabanlı bir uygulamanın Jenkins kullanılarak Continuous Integration (CI) ve Continuous Deployment (CD) süreçlerinin nasıl otomatize edileceğini göstermektedir. Pipeline, uygulamanın önce Maven ile derlenmesini, Docker imajının oluşturulmasını ve sonrasında Docker Hub'a gönderilmesini sağlar. Bu sayede, her yeni commit sonrası uygulamanızın en güncel versiyonu otomatik olarak Docker Hub'da yayınlanır ve dağıtıma hazır hale gelir.
- Jenkins (CI/CD işlemleri için)
- Maven (Spring Boot uygulamasını derlemek için)
- Docker (Uygulamayı konteynerleştirmek ve Docker Hub'a göndermek için)
- Docker Hub Hesabı (Docker imajlarını paylaşmak için)
- ngrok (Jenkins'i dış dünyaya açmak ve webhook bağlantısını sağlamak için)
Projenizde her yeni commit yaptığınızda Jenkins pipeline'ının otomatik olarak çalışması için GitHub üzerinde bir Webhook eklenmiştir. Bu webhook, Jenkins'e yapılan her push işlemini haber verir ve pipeline'ın tetiklenmesini sağlar.
-
ngrok kullanarak Jenkins'inize dış dünyadan erişim sağladım. Jenkins'iniz lokal ortamda çalıştığında dışarıya bir URL verebilmek için
ngrok
ile geçici bir HTTP tüneli açabilirsiniz. Aşağıdaki komut ilengrok
üzerinden Jenkins'inize ulaşılabilir bir URL elde edebilirsiniz:ngrok http <jenkins_port>
Örneğin, Jenkins'iniz varsayılan olarak
8080
portunda çalışıyorsa:ngrok http 8080
Bu komut size bir URL verecektir (örneğin:
https://abcd1234.ngrok.io
). Bu URL'yi GitHub Webhook ayarlarında kullanabilirsiniz. -
GitHub'da proje ayarlarına gidin ve Settings > Webhooks kısmında yeni bir webhook ekleyin.
-
Payload URL kısmına ngrok tarafından verilen URL'yi kullanarak şu şekilde girin:
https://abcd1234.ngrok.io/github-webhook/
-
Content type olarak application/x-www-form-urlencoded seçebilirsiniz.
-
Son olarak, hangi eventlerde tetikleneceğini seçin. Just the push event seçeneği işaretlenmiş olmalı.
Aşağıdaki kod, Jenkins'te kullanılan pipeline tanımını içermektedir:
pipeline {
agent any
tools {
maven 'maven'
}
stages {
stage('Build Maven') {
steps {
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[url: 'https://github.com/your-username/your-repo-name']])
sh 'mvn clean install'
}
}
stage('Build Docker Image') {
steps {
script {
sh 'docker build -t your-dockerhub-username/your-app-name:0.0.1 .'
}
}
}
stage('Push image to Hub') {
steps {
script {
withCredentials([string(credentialsId: 'dockerhub-pwd', variable: 'dockerhubpwd')]) {
sh 'docker login -u your-dockerhub-username -p ${dockerhubpwd}'
}
sh 'docker push your-dockerhub-username/your-app-name:0.0.1'
}
}
}
}
}
- your-username: GitHub kullanıcı adınız.
- your-repo-name: GitHub repo adınız.
- your-dockerhub-username: Docker Hub kullanıcı adınız.
- your-app-name: Docker imajınıza vermek istediğiniz ad.
Pipeline'da kullanılan Docker Hub kimlik bilgileri, Jenkins'in withCredentials
bloğu içerisinde güvenli bir şekilde yönetilmektedir. dockerhub-pwd
olarak tanımlanan kimlik bilgileri, Jenkins'in Credentials bölümüne eklenmeli ve burada güvenli bir şekilde saklanmalıdır. Bu sayede, Docker Hub'a giriş yapmak için şifrenizi doğrudan kodda belirtmenize gerek kalmaz.
- Jenkins'te yeni bir pipeline projesi oluşturun.
- Yukarıdaki pipeline kodunu Jenkins'e yapıştırın.
dockerhub-pwd
kimlik bilgilerini Jenkins'te ekleyin.- Pipeline'ı çalıştırın. Jenkins, projenizi otomatik olarak derleyecek, Docker imajını oluşturacak ve Docker Hub'a gönderecektir.
Bu proje, Spring Boot uygulamalarınız için CI/CD süreçlerini otomatize ederek, geliştirme döngüsünü hızlandırmayı amaçlamaktadır. Her main branch'ine yapılan yeni push ile birlikte uygulamanızın en güncel versiyonu Docker Hub'da yayınlanacak ve dağıtıma hazır hale gelecektir. Pipeline'da kullanılan her adım, geliştirme ve devops süreçlerini daha verimli ve sorunsuz hale getirmek için tasarlanmıştır.