Сборка Jenkins без сбоев на этапе конвейера, где OW ASP Dependency Checker находит уязвимости - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь завершить сборку Jenkins на стадии конвейера, когда OW ASP Проверка зависимостей находит и сообщает об обнаруженных уязвимостях . Но вместо этого он продвигается вперед и выполняет все последующие этапы, даже если обнаружена уязвимость. Мой Jenkinsfile выглядит так: -

pipeline {
    tools {
        nodejs "nodejs"
    }
    stages {
        stage('install') {
            steps {
                // 'ci' install node modules
                sh 'npm ci'
            }
        }
        stage('Dependency Check') {
            steps {
                sh 'npm prune --production'
                sh "mkdir -p build/report"
                sh "'$DEPENDENCY_PATH' --project demoProject --disableRetireJS --suppression 'dependency-check-suppressions.xml' --format XML --out 'build/report/dependency-check-report.xml' --scan ."
                dependencyCheckPublisher pattern: 'build/report/dependency-check-report.xml', failedTotalCritical: '0', failedTotalHigh: '0', failedTotalLow: '0', failedTotalMedium: '0'
            }
        }
        stage('Test Step') {
            steps {
                sh 'echo "Reaching test step"'
            }
        }
    }
}

Env. переменная '$ DEPENDENCY_PATH' содержит местоположение файла dependency-check.bat . OW ASP Проверка зависимостей находит и сообщает об уязвимостях, которые я вижу в отчете о проверке зависимостей . xml, и в конце он также завершается неудачей сборки. Но последний этап теста также выполняется, чего я не хочу. Я хочу, чтобы сборка Jenkins не выполнялась на этапе проверки зависимостей при обнаружении каких-либо уязвимостей. Где я здесь ошибаюсь?

1 Ответ

0 голосов
/ 06 мая 2020

Кажется, что DependencyCheckPublisher выдает ошибку, но Дженкинс не может поймать ее в этот момент, но в конце он проверяет на то же и завершает сборку. Чтобы поймать ошибку именно в той точке, где она генерируется DependencyCheckPublisher, мне пришлось ввести проверку вывода консоли rawBuild, которая проверяет, напечатал ли DependencyCheckPublisher что-либо о превышении количества для уязвимостей или нет. После dependencyCheckPublisher step add -

if (currentBuild.rawBuild.getLog(50).contains('[DependencyCheck] Findings exceed configured thresholds')) {
        error("Build failed due to vulnerabilities found during dependencyCheck")    
}else{
        sh 'echo "No vulnerabilities found during dependencyCheck"'
}

Для этого вам также необходимо разрешить rawBuild и getLog разрешение на вызов от Jenkins. Вы можете сделать это из Jenkins -> Управление Jenkins -> Утверждение внутрипроцессного сценария и разрешить их оба (если вы их не разрешили, сборка Jenkins завершится неудачно и на выходе консоли произойдет сбой build вы можете найти подробности относительно этого)

...