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”’
   45   46   47   48   49   50   51   52   53   54   55