У меня есть конвейер, который выполняет много команд sh
(shell) против AWS. Все они работают без проблем, кроме этого. Первоначально я просто запускал команду sh
напрямую, но в итоге завернул ее в блок try для отладки.
def instanceip = instance_details =~ /PrivateIpAddress.*(10[0-9.]*)/
if ((instanceip)) {
INSTANCEIP = instanceip.group(1)
println "INSTANCE_IP=$INSTANCEIP"
}
def instanceid = instance_details =~ /InstanceId.*(i-[0-9a-f]*)/
if ((instanceid)) {
INSTANCEID = instanceid.group(1)
println "INSTANCE_ID=$INSTANCEID"
}
try {
shellCommand = "aws ec2 terminate-instances --region ${args.awsRegion} --instance-ids $INSTANCEID"
println "executing: ${shellCommand}"
sh "${shellCommand}"
} catch (NotSerializableException err) {
println "${err}"
}
Я подтвердил, что команда sh
действительна и даже запускается, но по неизвестной причине он производит java.io.NotSerializableException: java.util.regex.Matcher
. Вот соответствующие журналы из моего конвейера:
[Pipeline] echo
executing: aws ec2 terminate-instances --region us-west-2 --instance-ids i-0392802baaadca13d
[Pipeline] sh
+ aws ec2 terminate-instances --region us-west-2 --instance-ids i-0392802baaadca13d
{
"TerminatingInstances": [
{
"InstanceId": "i-0392802baaadca13d",
"CurrentState": {
"Code": 32,
"Name": "shutting-down"
},
"PreviousState": {
"Code": 0,
"Name": "pending"
}
}
]
}
[Pipeline] echo
java.io.NotSerializableException: java.util.regex.Matcher
Так же, как и другие вызовы aws
, похоже, что он возвращает очень обычный JSON документ в виде простого текста.
Я получил идентификатор экземпляра с помощью регулярного выражения, но подтвердил, что это строка, и она, очевидно, преобразуется в строку, которую я даю sh
. Почему результат выполнения этой команды sh
вызывает это исключение?