Как передать значения из оболочки в переменные Jenkins? - PullRequest
0 голосов
/ 15 марта 2020

Я работаю над сценарием Jenkins DSL, где мне нужно передать некоторые значения из выполнения оболочки в groovy переменные. Ниже приведен код -

sh  '''   stopPrimary="$(aws ec2 describe-instances --instance-ids ${primaryInstanceId} 2>&1)"
            stopSecondary="$(aws ec2 describe-instances --instance-ids ${secondaryInstanceId} 2>&1)"
            stopTest="$(aws ec2 describe-instances --instance-ids i-323223232323 2>&1)"
      ''' 
//Testing if both instances are stopped else throwing an error
if ( stopTest.contains("An error occurred") || stopSecondary.contains("An error occurred") )  {
       error("One or more actions failed - ${stopPrimary} ${stopSecondary}")
} else {
       echo "Storage Servers stopped now - Proceeding with Terraform apply"
} 

Мне нужно, чтобы значения переменных при выполнении оболочки (stopPrimary, stopSecondary, stopTest) использовались в следующем блоке кода if-else. Однако, похоже, это не сработает.

Есть мысли о том, что я могу делать неправильно?

Спасибо

1 Ответ

0 голосов
/ 15 марта 2020

Ваша директива sh запускает дочерний процесс, запускающий bash. Ваш дочерний процесс наследует все переменные окружения родительского процесса и может создавать некоторые свои собственные переменные. Как только ваш дочерний процесс умирает, все переменные - и наследуемые, и созданные - d ie с ним

Один из двух способов решения этой проблемы:

  1. Если вам нужно понять, была ли ваша команда успешной или неудачной, вы можете полагаться на статус ошибки вместо сообщения об ошибке. , Обычно linux команды возвращают 0, если они были выполнены успешно, и не 0 в противном случае. Дженкинс отказывает в конвейере по любой команде, отличной от 0 Итак, следующих может будет достаточно:
sh "aws ec2 describe-instances --instance-ids ${primaryInstanceId}"

Если эта команда вернет состояние, отличное от 0, конвейер завершится ошибкой. Вы можете заключить его в try { ... } catch () { ... }, чтобы поднять свою собственную ошибку.

Если вам нужно использовать выходные данные позже в конвейере, вы должны либо получить их из выходных данных (например, запустив sh script: "...", returnStdout: true, либо вы можете захотеть записать их в файл, а потом обработать этот файл.
...