Selamlar, bir önceki yazımızda Fortify Assesment eklentisi ile Frestyle proje ile Fortify taraması başlatmıştık. Bu yazımızda da Jenkins üzerinden Pipeline Script kullanarak Fortify Scancentral ile kaynak kod taraması başlatmayı inceleyeceğiz.
İlk olarak Jenkins Dashboard’a gidip New Item seçeneği ile ilerleyip Pipeline seçeneğini seçerek OK butonu ile ilerlenir:
Ardından, taramak istediğimiz uygulama Github’da bulunduğu için Github Project işaretlenerek Project URL bilgisi girilir.
Jenkins Agent’a yaptırmak istediğimiz işi Pipeline Script ile yaptıracağımız için aşağıda yer alan Script alanına Pipeline’ın stage’leri tanımlanır.
Pipeline Script’i Analiz Edelim
Pipeline Script’in genel yapısı aşağıda gözüktüğü gibidir.
-
- satır’da job için bir agent atıyoruz, any ile herhangi bir agent’ın kullanılabileceğini belirttik.
-
- satır’da pipeline’ın stage’lerini listelemeye başladık
- stage(
) ile stagelerimizi tanımlayıp, stage içerisine uygulanacak komutları yazdık.
pipeline {
agent any
stages {
stage('Stage 1') {
steps {
step command
}
}
stage('Stage 2') {
steps {
step command
}
}
}
}
Scripting son haline aşağıdan ulaşabilirsiniz.
- Checkout Main adımında Github üzerinden projemizin main branchini çektik.
- Fortify Scancentral Submit adımında fortifyRemoteAnalysis eklentisi ile scancentral vasıtasıyla bir tarama başlattık.
- fortifyRemoteAnalysis için pipeline script syntaxına “Pipeline Sytanx” bağlantısı üzerinden erişim sağlayabilirsiniz. Açılan pencerede sonuçları SSC’ye yüklemek istediğimiz Fortify projesini seçip ve ilgili konfigürasyonları yaptıktan sonra “Generate Pipeline Script” butonu kullanılarak pipeline için step oluşturulabilir.
- Capture the Job Token and Print adımında ise submit ettiğimiz scancentral job’un token bilgisini yakalayıp ekrana bastırdık. Burada “arbitary pipeline script” kullanıp mevcut pipeline’ın son 200 satır logunu alıp regex ile Job Token bilgisini çektik.
-
NOT:
Burada yakalanan Job Token bilgisi, Fortify API üzerinden çeşitli otomasyonlar gerçekleştirmek amacıyla kullanılabilir.
-
pipeline {
agent any
stages {
stage('Checkout Main') {
steps {
git branch: 'main', url: 'https://github.com/rbozburun/WebGoat'
}
}
stage('Fortify Scancentral Submit') {
steps {
fortifyRemoteAnalysis remoteAnalysisProjectType: fortifyOther(), uploadSSC: [appName: 'WebGoat', appVersion: 'Jenkins-PipelineScript']
}
}
stage('Capture the Job Token and Print') {
steps {
script {
def log = currentBuild.rawBuild.getLog(200).join('\n')
def jobToken = log =~ /Submitted job and received token:\s+([a-z0-9\-]+)/
if (jobToken) {
jobToken = jobToken[0][1]
echo "Job Token: ${jobToken}"
} else {
echo "Job Token not found"
}
}
}
}
}
}
Pipeline Script kaydedilip build işlemi başlatıldığında Fortify Scancentral’a ilgili job’un düştüğü gözlemlenir:
Ayrıca, Pipeline Console çıktısı incelendiğinde Job Token’ın da başarılı bir şekilde yaklandığı görülür: