Jenkins Pipleline с использованием задания плана Groovy_Terraform - PullRequest
0 голосов
/ 07 сентября 2018

Я создаю конвейер, используя jenkins, пытаясь добавить логику, в которой, если terraform-plan успешен, тогда только он продолжит применять, поэтому необходимо получить возвращаемое значение как 0/1/2 из команды sh terraform plan но получаю ошибку, как показано ниже:

+ gt
+ echo 2
2
C:/Users/Smi/.jenkins/workspace/Pipe_Groovy@tmp/durable-33bd46fb/script.sh: line 2: gt: command not found
+ status
C:/Users/Smi/.jenkins/workspace/Pipe_Groovy@tmp/durable-33bd46fb/script.sh: line 2: status: command not found
[Pipeline] }

Ниже приведен код:

sh "terraform init"
sh "terraform get"
sh "set +e; terraform plan -out=plan.out -detailed-exitcode; echo \$? > status"
def exitCode = readFile('status').trim()
def apply = false
echo "Terraform Plan Exit Code: ${exitCode}"
if (exitCode == "0") {
    currentBuild.result = 'SUCCESS'
}
if (exitCode == "1") {
    slackSend channel: '#ci', color: '#0080ff', message: "Plan Failed: ${env.JOB_NAME} - ${env.BUILD_NUMBER} ()"
    currentBuild.result = 'FAILURE'
}
if (exitCode == "2") {
    stash name: "plan", includes: "plan.out"
    slackSend channel: '#ci', color: 'good', message: "Plan Awaiting Approval: ${env.JOB_NAME} - ${env.BUILD_NUMBER} ()"
    try {
        input message: 'Apply Plan?', ok: 'Apply'
        apply = true
    } catch (err) {
        slackSend channel: '#ci', color: 'warning', message: "Plan Discarded: ${env.JOB_NAME} - ${env.BUILD_NUMBER} ()"
        apply = false
        currentBuild.result = 'UNSTABLE'
    }
}

Пожалуйста, совет

1 Ответ

0 голосов
/ 08 сентября 2018

Оболочка пытается найти команду с именем gt и терпит неудачу, поэтому на этом этапе ваша работа не выполняется. Вы, вероятно, хотели использовать > вместо.

Существует способ получить код завершения команды bash, не перенаправляя его в файл и не считывая его:

def status = sh(returnStatus: true, script: "set +e; terraform plan -out=plan.out -detailed-exitcode")
...