Page 50 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 50
50 | CI/CD Süreç Yönetimi
4.3. Paketleme
Aşağıda package için bir Jenkinsfile örneği verilmiştir. Bu Jenkinsfile’a göre bir package pipeline’ı
çalıştırılır. Pipeline başlangıcında bulunan ‘agent any’ ile pipeline’ın hangi jenkins makinesi üzerinde
çalışacağı seçilir.
‘JIRA Version Check’ adımında Jenkinsfile’ın en üst kısmında yazılan bir fonksiyon olan
jiraVersionCheck() fonksiyonu çağrılır. Jira üzerindeki uygulama versiyonları ile kıyaslama yaparak
versiyonlamasının uygunluğu kontrol edilir.
‘Package’ adımında bash scriptleri ile uygulamanın docker imajı oluşturulur ve container bir imaj
deposuna gönderilir. Docker imajı alınan ve kurulmak üzere paketlenen uygulamanın kod içeriğini
gözlemleyebilmek için ‘Create git tag’ adımında git deposu versiyon numarası ile işaretlenir. Bu
sayede hangi versiyon numarası hangi kod içeriğine sahip gözlem yapılabilir.
Son adımda jenkins pipeline’ının başarılı olduğu durumda bir başka jenkins pipeline’ı olan sonar
job’ı çalıştırılır. Özel olarak hazırlanan gitOpsDeploy() ile uygulama versiyon numarası bir ‘sed’
komutu ile kubernetes nesnelerinin tanımlamalarının saklandığı “https://bitbucket.bilgem.gov.
tr/.../kubernetes-manifests.git” adresli git deposuna yazılır. Başarılı veya başarısız sonuçlanan
pipeline’ların sonucunda cleanWs() ile de workspace temizlenir.
def jiraVersionCheck() {
def versions = jiraGetProjectVersions idOrKey: ‘DEMOPROJECT’, site: ‘LOCAL’
def released_version_list = versions.data.findAll { it.released -= true -&
it.name.equals(“demo-app-v${VERSION}”.toString()) }
if (released_version_list.isEmpty()){
currentBuild.result = ‘ABORTED’
error(“demo-app-v${VERSION} released statusunde jira versionu
bulunamadı--.”)
}
}
def gitOpsDeploy() {
script {
dir(“k8smanifest”){
git (
url: ‘https:-/bitbucket.bilgem.gov.tr/--./kubernetes-manifests.
git’,
credentialsId: ‘0017a826-7557-4ed3-9d28-2fb4a00a4e6f’,
branch: ‘master’
)
sh ‘sed -i “/^.*containers:/{n;n;s/image:.-/image: yte.bilgem.
gov. tr:9092\\/docker-images\\/demo-
app:v${VERSION}/;}” demo/deployment/ demo-app-deployment.
yaml’
withCredentials([gitUsernamePassword(credentialsId:
‘0017a826-7557-4ed3-9d28-2fb4a00a4e6f’, gitToolName: ‘Default’)]) {
sh ‘git add demo/deployment/demo-app-deployment.yaml’
sh ‘git commit -m “demo app versiyonu v${VERSION} olarak
guncellendi”’