You are currently viewing CI / CD Nedir? Jenkins ile CI / CD Pipeline’ları Hazırlama

CI / CD Nedir? Jenkins ile CI / CD Pipeline’ları Hazırlama

CI ve CD kavramları, yazılım geliştirme süreçlerinde sürekli entegrasyon (continuous integration) ve sürekli teslim (continuous delivery) uygulamalarını ifade eder. Yazılımların derlenme (build), test edilme, ve canlıya alınma (deployment) süreçlini otomatize etmek için hazırlanmaktadırlar. Böylelikle hem zaman kazanılmış, hem de bu tekrar tekrar yapılan ve zaman alan operasyonlarda harcanan zaman ortadan kaldırılmış, hem de meydana gelebilecek insani hataların engellenmesi sağlanmış olur. CI / CD projeleri, pipeline denilen ve sırasıyla birbiri arkasında çalışan aşamalardan oluşmaktadır.

CI / CD Pipeline

Sürekli entegrasyon, ekip halinde geliştirilen yazılımlarda ekiplerin yaptıkları değişiklikleri kısa aralıklar ile senkronize etmesidir. Böyle büyük çakışmalardan (code conflict) kaçınılmış olur. Bu senkronizasyon sırasında entegre edilecek kodun hatasız, belirli standartlarda ve kalitede olduğundan emin olmak adına kod analizi araçları, kod formatlayıcıları, ve otomatik testler çalıştırılmaktadır. SonarQube, popüler pek çok dilde statik kod analizi yapabilen, bedava ve açık kaynak versiyonu bulunan bir araçtır. Prettier gibi çözümler ise kod formatlayıcı olarak kullanılabilirler. Bu testlerden onay alan kod, diğer geliştiricilere dağıtılır.

Sürekli teslim aşaması da yazılımın yayıma hazır bir şekilde paketlenmesi, canlı olarak çalışacağı ortama taşınması ve gerekli konfigürasyonların yapılması adımlarını içermektedir.

Jenkins

Jenkins, Windows, Linux ve MacOS platformlarında çalışabilen bir CI/CD yazılımıdır. Pipeline’larınızı tanımlamanız için groovy dilinde kodlar yazmanıza olanak sağlar. Tanımlayıcı (Declarative) ve komut dizisi (imperative) olarak pipeline’lar oluşturmamızı sağlayan iki çeşit sentaks destekler. Tavsiye edilen ve en çok kullanılan sentaks tarzı tanımlayıcı olduğundan yazımızda bundan bahsedeceğiz.

Jenkins pipeline’ları proje dizininde bulunan Jenkinsfile ismindeki dosyalara yazılmaktadır. Jenkins dökünmantasyonundan almış olduğum bir pipeline’ı inceleyelim.

pipeline {
    agent any
    stages {
        stage('Example') {
            steps { 
                echo 'Hello World'
            }
        }
    }
}

Her Jenkins pipeline’ı pipeline bloğu içerisine yazılır. Agent kısmı pipeline’ın hangi ortamda çalıştırılacağını söyler. Bu kısımda Windows, Linux ya da Docker ortamları tercih edilebilir. Stage kısmında ise aşamalarımız tanımlanır. Tipik bir pipeline’da yukarıda bahsettiğimiz aşamalar birer step olarak pipeline’a tanımlanır. Steps bloğunda ise bu aşamada çalıştırmak istediğimiz komutları yazarız.

pipeline {
    agent any
    environment { 
        CC = 'clang'
    }
    stages {
        stage('Example') {
            environment { 
                AN_ACCESS_KEY = credentials('my-predefined-secret-text') 
            }
            steps {
                sh 'printenv'
            }
        }
    }
}

Environment bloğunda, pipeline’ımızda kullanacağımız ortam değişkenlerini tanımlayabiliriz. Ayrıca kullanıcı adı ve şifremiz gibi gizli kalması gereken bilgileri Jenkins sayfasında “credentials” kısmına tanımlayarak pipeline içerisinde kullanabiliriz.

Böylelikle CI/CD kavramlarını öğrenmiş ve Jenkins kullanarak kendi pipeline’larımızı nasıl oluşturabileceğimizi öğrenmiş olduk. Jenkins ekosistemi SonarQube, versiyon kontrol uygulamaları ile kolay şekilde çalışabileceğiniz bir plugin havuzuna sahiptir. Bunları kullanarak ve pipeline tanımları ile ilgili detaylı dökünmantasyonları ve eğitimleri takip ederek projeleriniz için geliştirme, test etme ve yayımla süreçlerinizi otomatikleştirebilirsiniz.

Bir yanıt yazın