【发布时间】:2021-06-17 06:39:08
【问题描述】:
我正在尝试创建一个创建 EC2 实例的管道,并且我想在其上执行一些 shell 命令。
Terraform 应用计划后,AWS 创建新实例:
- 构建 [尚无关于公共 IP 的信息]
- 暂存 [尚无关于公共 IP 的信息]
在计划阶段无法检索公共 ipv4 信息,因此我创建了该结构:
stage ('Running command on a Build server') {
steps {
script {
BUILD_INSTANCE_IP = sh (
script: """
aws --region eu-central-1 ec2 describe-instances --filter \
"Name=instance-state-name,Values=running" --query \
"Reservations[*].Instances[*].[PublicIpAddress, Tags[?Key=='Name'].Value|[0]]" \
--output text | grep Build | cut -f1 //retrieve 'Build' instance IP
""", returnStdout: true
).trim()
sleep time: 3, unit: 'MINUTES' // wait 3 minutes until instance will be available to connect
sh ( script: """ssh -i ${AWS_KEY} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@${BUILD_INSTANCE_IP} touch /home/ubuntu/test.txt""", returnStdout: true ).trim()
所以,这里我需要通过 sshagent {} 指令连接到实例,但是 Jenkins 移动到新的部分后,变量 1 的数据被重置为零。
如何制作一个不会改变的变量?
【问题讨论】:
标签: jenkins amazon-ec2 terraform