Недавно я начал попытки консолидировать некоторые глобальные переменные, настроенные для нашего конвейерного сценария Jenkins.Я начинаю с малого (с одного логического значения, чтобы контролировать, нужно ли регистрировать много «лишних» вещей в журнале сборки), и хотел следовать NotificationConfig , созданным Szymon Stepniak.Однако я не могу преодолеть исключение NullPointerException, которое выдается при инициализации синглтона DebugOptions
.
Макет исходного кода совместно используемой библиотеки
.
├── src
│ └── foo
│ └── utils
│ └── DebugOptions.groovy
└── vars
├── debugOptions.groovy
└── standardPipeline.groovy
src / com / foo / utils / DebugOptions.groovy
#!/usr/bin/env groovy
package com.foo.utils;
@Singleton
class DebugOptions {
// Simple wrapper around a debugging options to prevent argument
// explosion for everything that needs to filter output.
boolean flag = false
}
vars / debugOptions.groovy
#!groovy
import com.foo.utils.DebugOptions
// This DSL ("Domain Specific Language") helps modify and manage configuration objects
// Implement a closure body to be executed in context of DebugOptions
// Defining in vars makes it globally accessible
//
// Inspired by code at:
// https://stackoverflow.com/questions/50962643/best-way-to-set-reusable-property-in-jenkinsfile
def call(body) {
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = DebugOptions.instance
body()
}
/ vars / standardPipeline.groovy
#!/usr/bin/env groovy
def call(body) {
boolean PIPELINE_DEBUG = ("${env.PIPELINE_DEBUG}"!="0")
if(PIPELINE_DEBUG){ println "[DEBUG] Pipeline Debug Logging Enabled" }
try{
debugOptions { flag = PIPELINE_DEBUG }
println DebugOptions.instance.flag
} catch (Exception e) {
println e.message
error e.message
}
}
// rest of pipeline implementation
Project Jenkinsfile
#!groovy
library "utils"
standardPipeline()
Вывод сборки
[Pipeline] echo
[DEBUG] Pipeline Debug Logging Enabled
[Pipeline] End of Pipeline
[Bitbucket] Notifying commit build result
[Bitbucket] Build result notified
java.lang.NullPointerException
Finished: FAILURE
Вопросы
- Есть ли способ получить больше информациинасчет исключения nullpointer (например, трассировки стека)?Я попытался
throw e.message
вместо error e.message
, и я получил тот же вывод. - Есть ли плагин, который мне нужен, чтобы это произошло?У меня есть все известные мне плагины Pipeline (особенно Pipeline-Groovy)
- В
src/com/foo/utils/DebugOptions.groovy
нужна ли точка с запятой после строки пакета? - Может кто-нибудь указать, гдемоя проблема на самом деле?
- Наконец, и я знаю, что это субъективно, но есть ли что-то, что я должен улучшить с этим кодом?С одной стороны, меня не волнует разница с учетом регистра в D / debugOptions.
Спасибо!