Jenkins 管道 sh 添加新行

标签 jenkins groovy sh jenkins-pipeline terraform

我的管道 sh block :

 sh "set +e; /terraform/terraform plan -var aws_access_key=${aws_access_key} -
 var aws_secret_key=${aws_secret_key} -var aws_ami=${ami_id} -var 
 aws_instance_type=${instance_type} -var aws_elb_security_group=${elb_sg} -var 
 aws_ec2_security_group=${ec2_sg} -detailed-exitcode; echo \$? > status"
              exitCode = readFile('status').trim()
              echo "Terraform Plan Exit Code: ${exitCode}"

输出:

+ set +e
+ /terraform/terraform plan -var aws_access_key=**** -var aws_secret_key=**** -var aws_ami=ami-xxxxxxx
+ -var aws_instance_type=t2.medium -var aws_elb_security_group=sg-xxxx
/terraform/selectdev/int/mp-frontend@tmp/durable-6c57c14c/script.sh: line 3: -var: command not found
+ -var aws_ec2_security_group=sg-axxx
 /terraform/selectdev/int/mp-frontend@tmp/durable-6c57c14c/script.sh: line 4: -var: command not found
+ -detailed-exitcode
/terraform/selectdev/int/mp-frontend@tmp/durable-6c57c14c/script.sh: line 5: 
 -detailed-exitcode: command not found
+ echo 127

我不确定为什么要在命令中添加新行,如果我使用 sh '' 等单引号,变量将为空。我做错了什么?

我尝试像下面那样做,但它也添加了新行

def command = $/....../$
res = sh(returnStdout: true, script: command)

最佳答案

首先,仅供引用:single quotes skip variable interpolation in groovy

如果您想在字符串中包含多行脚本,则需要在多行变量中转义结束行。

你需要三件事:

  1. Use triple double strings """。这允许您拥有带有插值的多行字符串(三重单引号字符串'''让您可以在不进行插值的情况下执行相同的操作)。
  2. 使用 \ 转义行尾。这使您可以插入换行符来格式化长命令。
  3. 用双引号括住变量(在三个双引号内有效,但您也可以转义双引号,否则:\")

例如如下:(为了可读性,每行一个参数)

sh("""set +e; /terraform/terraform plan \
-var aws_access_key="${aws_access_key}" \
-var aws_secret_key="${aws_secret_key}" \
-var aws_ami="${ami_id}" \
-var aws_instance_type="${instance_type}" \
-var aws_elb_security_group="${elb_sg}" \
-var aws_ec2_security_group="${ec2_sg}" \
-detailed-exitcode; echo \$? > status""")

关于 Jenkins 管道 sh 添加新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630765/

相关文章:

java - Selenium 测试的屏幕截图尺寸较小

java - 使用 Java 中的 GroovyClassLoader - 未 GC 的类

linux - 在下标中使用 exec 重定向标准输出

maven - 如何在共享 jenkins 服务器上管理 maven settings.xml?

android - 多个模拟器上的 connectedAndroidTest

java - 无法刷新 Groovy Socket

grails - 使用 Groovy 分割 map

linux - 尽管端口忙于第一个实例,但多个服务实例正在使用 tomcat 开始

linux - 如何使用 sh 脚本正确读取文件并在 if 语句中使用它?

java - 如何在groovy和SoapUI中生成带有时间戳的新txt文件?