Skip to content

Explicació del Jenkinsfile

Aquest és un Jenkinsfile que utilitza OWASP ZAP per conduir un escaneig de seguretat en una aplicació web.

properties([ 
    parameters([ 
        string ( name: 'WEB_URL', defaultValue: 'http://frontend.conference-app', description: 'URL de la web a scanear' ),
        choice ( name: 'test_type', choices: ["baseline", "full-scan", "api-scan"], description: 'Level of testing to use.' ),
        booleanParam ( name: 'w_error', defaultValue: false, description: 'Mark the checkbox to treat warnings as a error' ) 
    ]) 
]) 

Aquesta secció defineix les propietats i paràmetres que es poden configurar per a la construcció, com l'URL de la web a escanejar, el nivell de proves a utilitzar i si volem tractar els advertiments com errors.

podTemplate(label: 'owaszap', 
    containers: [ 
        containerTemplate( 
            name: 'owaszap', 
            image: 'ghcr.io/zaproxy/zaproxy:stable', 
            command: 'cat', 
            ttyEnabled: true, 
            resources: [ 
                limits: [ memory: '2Gi', cpu: '2' ], 
                requests: [ memory: '2Gi', cpu: '2' ] 
            ] 
        ) 
    ]) 

Aquést bloc defineix el template del pod "owaszap" que utilitzarà la imatge de Docker "zaproxy/zaproxy:stable". També estableix límits i requests per a la memòria i el CPU.

node('owaszap') { 
    def error_level = "-I" 
    if (params.w_error){ 
        error_level = "" 
    } 
    def api_type = "" 
    if (params.test_type == "api-scan"){ 
        api_type = "-f openapi" 
    } 

Estem fixant el nivell d'error i el tipus d'API segons els paràmetres proporcionats.

stage('owaszap run') { 
    container('owaszap') { 
        sh("mkdir -p /zap/wrk && sed -i 's/traditional-html/high-level-report/' /zap/zap-${params.test_type}.py && zap-${params.test_type}.py -t ${params.WEB_URL} ${api_type} ${error_level} -r report.html && mv /zap/wrk/* . ") 
    } 
} 

En aquest estadi, el contenidor està executant-se, escanejant la aplicació web amb OWASP ZAP.

stage("Publish report") { 
    publishHTML([ 
        reportName: 'OwaszapReport', 
        reportDir: '.', 
        reportFiles: 'report.html', 
        keepAll: true, 
        allowMissing: false, 
        alwaysLinkToLastBuild: true, 
        useWrapperFileDirectly: true 
    ]) 
} 

Finalment, l'estadi "Publish report" publica l'informe generat a través del escaneig de seguretat OWASP ZAP.