Jenkins中使用read命令赋值多行字符串时出现退出码1错误
Jenkins流水线中用read赋值多行字符串报错的解决方法
问题原因
你脚本里的here-doc结束标记EOF带有缩进,bash无法识别它为read命令的结束符,导致read一直等待输入直到脚本终止,返回非0退出码,触发-e选项(遇到错误立即退出),最终Jenkins报exit code 1。
解决方案
方案1:将EOF顶格写
直接把结束标记EOF放在行首,去掉前面的缩进:
stage('test step') { steps { sh '''#!/bin/bash -xe read -r -d '' MULTI_LINE_VAR_STRING <<EOF example row 1 example row 2 example row 3 EOF ''' } }
方案2:用<<-EOF忽略EOF前的制表符缩进
如果想保留缩进格式,可以用<<-EOF,此时EOF前面的制表符会被忽略(注意只能是制表符,不能是空格):
stage('test step') { steps { sh '''#!/bin/bash -xe read -r -d '' MULTI_LINE_VAR_STRING <<-EOF example row 1 example row 2 example row 3 EOF ''' } }
验证说明
两种方案都能让bash正确识别here-doc的结束标记,read命令成功读取多行字符串到变量中,避免因未找到结束符导致的退出错误。
内容的提问来源于stack exchange,提问作者Martin Bohm
相关产品推荐
相关产品推荐

