Zasadniczo to właśnie robi krok sh
. Jeśli nie uchwycić wynik w zmiennej, można po prostu uruchomić:
sh "./build"
to wyjdzie, jeśli skrypt reurns niezerowy kod zakończenia.
Jeśli trzeba robić rzeczy, po pierwsze, i trzeba uchwycić efekt, można użyć kroku powłoki rzucić tę pracę
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
// do more stuff here
// this will terminate the job if result is non-zero
// You don't even have to set the result to FAILURE by hand
sh "exit ${result}"
}
}
Ale dodaje daje to samo, ale wydaje się bardziej rozsądny do do
stage('Building') {
try {
sh './build.sh'
} finally {
echo '[FAILURE] Failed to build'
}
}
Możliwe jest również wywoływanie zwrotu w kodzie. Jeśli jednak znajdujesz się wewnątrz stage
, powróci on tylko z tego etapu. Więc
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
return
}
echo "This will not be displayed"
}
echo "The build will continue executing from here"
przyzwyczajenie zakończyć pracę, ale
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
}
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
return
}
wola.
Z Jenkins 2.89.3 to błąd: 'org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Skrypty nie dopuszczone do korzystania z nowych hudson.AbortException java.lang.String' –
Wygląda na włączony tryb Sandbox i zakazuje rzucania tego wyjątku. Rodzaj dziwnego, ale wyłączającego tryb Sandbox powinien załatwić sprawę. – Jazzschmidt
Można również zezwolić na użycie za pomocą polecenia Zarządzaj Jenkins> Zatwierdzenie skryptu w procesie – Jazzschmidt