Я реализую декларативный Jenkinsfile и хочу запустить команду windows и присвоить результат переменной.
Вот мой код:
stage('check latest commit') {
steps {
script{
COMMIT = bat("c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'").trim() as String
echo "${COMMIT}"
}
}
}
И я получаю следующий журнал в задании Jenkins
c:\Software\JenkinsWorkspace\workspace\TFS - XXX>c:\Software\Git\bin\git.exe log -n 1 --pretty=format:'%H'
'656669102c187fe390a1e9d72ed47aa2d8528ad6'[Pipeline] }
[Pipeline] // script
Таким образом, команда выполняется должным образом и возвращает га sh за последний коммит в HEAD. Отлично. Однако:
[Pipeline] End of Pipeline
java.lang.NullPointerException: Cannot invoke method trim() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
в конце цикла, я получаю эту ошибку. Это означает, что значение, возвращаемое к команде, равно null
, даже если сама команда выдает результат.
Если я не включаю усечение, например:
stage('check latest commit') {
steps {
script{
COMMIT = bat("c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'")
echo "${COMMIT}"
}
}
}
следующая запись в журнале показывает:
[Pipeline] bat
c:\Software\JenkinsWorkspace\workspace\TFS - XXX>c:\Software\Git\bin\git.exe log -n 1 --pretty=format:'%H'
'c77c806cdafd4f45373ef0cef8c6ff60da26611f'[Pipeline] echo
null
[Pipeline] }
Обратите внимание на значение NULL в журнале. Это результат того, что я пытался напечатать значение COMMIT.
Вопрос: Как правильно назначить значение переменной, когда такое значение должно возвращаться из команды cmd. Я реализую декларативный Jenkinsfile, и я не могу сейчас вернуться к сценарию.
РЕДАКТИРОВАТЬ: Да, я знаю, что я мог бы получить коммит га sh другим способом, однако, есть другие команды, которые мне нужно выполнить, и мне также нужны их значения.