Проверка на исключение нулевого указателя в массиве в методе конвейерного сценария Jenkins - PullRequest
2 голосов
/ 25 октября 2019

Я внедряю значения параметра Active Choices в сценарий Jenkins с конвейером.

Примеры значений PFB передаются в блок параметров активного выбора:

return['ABC','DEF','GHI',JKL']

Мой пример сценария PFB:

node(){
    selectModName()
}

def selectModName(){
    stage 'Multi selection'
    String[] mods = "${modName}".split(',')
    modsz = mods.size()
    echo ''+modsz+''
    for(mod in mods){
        if (modsz == null || modsz == 0){
            echo 'There is nothing to be printed'
        } else {
            echo ''+mod+' is name of the module \n'
        }
    }
}

Блок else выполняется, когда я передаю большебольше или равно 1 значению (ям) (работает как задумано). Но блок if не выполняет свою логику, когда я не передаю какой-либо параметр и не нажимаю сборку.

Забавно, что size() возвращает 1 вместо 0 (echo ''+modsz+'') когда значения не передаются.

Как заставить if блок выполнять свою логику, когда значения не передаются?

1 Ответ

2 голосов
/ 25 октября 2019

Ваш код всегда переходит к блоку «else», потому что

"".split(',')

создает массив с одной пустой строкой.

assert "".split(',').size() == 1
assert "".splti(',') == [""] as String[]

Когда вы используете параметр активного выбора с несколькимиВыбор значений, и вы ничего не выбираете, имя вашей переменной хранит пустую строку. Сначала вы должны проверить, не является ли параметр modName пустой строкой, а только разделить и отобразить значения.

node(){
    selectModName()
}

def selectModName(){
    stage 'Multi selection'

    if (modName) {
        String[] mods = modName?.split(',')
        for (mod in mods) {
            echo " ${mod} is name of the module"
        }
    } else {
        echo 'There is nothing to be printed'
    }
}
...