Исключение нулевого указателя синглетного сценария Jenkins - PullRequest
0 голосов
/ 02 октября 2018

Недавно я начал попытки консолидировать некоторые глобальные переменные, настроенные для нашего конвейерного сценария 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

Вопросы

  1. Есть ли способ получить больше информациинасчет исключения nullpointer (например, трассировки стека)?Я попытался throw e.message вместо error e.message, и я получил тот же вывод.
  2. Есть ли плагин, который мне нужен, чтобы это произошло?У меня есть все известные мне плагины Pipeline (особенно Pipeline-Groovy)
  3. В src/com/foo/utils/DebugOptions.groovy нужна ли точка с запятой после строки пакета?
  4. Может кто-нибудь указать, гдемоя проблема на самом деле?
  5. Наконец, и я знаю, что это субъективно, но есть ли что-то, что я должен улучшить с этим кодом?С одной стороны, меня не волнует разница с учетом регистра в D / debugOptions.

Спасибо!

...