Jenkins PipelineScript ile Fortify Scancentral Taraması Başlatmak

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:

image.png

Ardından, taramak istediğimiz uygulama Github’da bulunduğu için Github Project işaretlenerek Project URL bilgisi girilir.

image.png

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.

image.png

Pipeline Script’i Analiz Edelim

Pipeline Script’in genel yapısı aşağıda gözüktüğü gibidir.

    1. satır’da job için bir agent atıyoruz, any ile herhangi bir agent’ın kullanılabileceğini belirttik.
    1. 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.

    image.png

  • 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:

image.png

Ayrıca, Pipeline Console çıktısı incelendiğinde Job Token’ın da başarılı bir şekilde yaklandığı görülür:

image.png

Written by

Resul Bozburun