这是我的管道脚本,我在其中调用一个 shell 脚本并传递参数。在这个 $np 和 $cp 中包含特殊字符,即 # ex: abcdefgh#abd#we23:
def name = 'xyz'
def np = ''
def cp = ''
def pnumber = 'if.com'
def mnumber ='12'
def unumber= 'abc'
pipeline{
stages{
stage('stage1'){
steps{
script{
cp = sh(script: "cat file.txt", returnStdout: true)
np = sh(script: "cat file2.txt", returnStdout: true)
}
}
stage('stage2'){
steps{
script{
sh "./myscript.sh $name $mnumber $pnumber $unumber $np $cp"
}
}
}
}
我的脚本在哪里:
#!/bin/bash
name=$1
pnumber=$2
mnumber=$3
unumber=$4
np=$5
cp=$6
sqlplus $unumber/$np/$cp/$unumber/$mnumber/$pnumber<<EOF
select date/$name;
exit;
EOF
我得到的管道脚本的输出没有最后一个参数。例如:
./myscript.sh abc xyz 123 User abcdefgh#abd#we23
它没有采用最后一个参数。
请求您帮助让我知道我的脚本出了什么问题。如果需要,我很乐意为您提供任何其他详细信息。 谢谢
最简单的是在 shell 端添加单引号,当密码或其他变量中有
'
时再回到问题:
sh "./myscript.sh $name $mnumber $pnumber $unumber '$np' '$cp'"
最可靠的是用环境变量传递所有内容,然后 shell 可以正确引用它。
environment {
name = name
number = number
pnumber = pnumber
unumber = unumber
cp = readFile "file.txt"
np = readFile "file2.txt"
}
script {
sh './myscript.sh "$name" "$mnumber" "$pnumber" "$unumber" "$np" "$cp"'
}
或者你可以序列化 ex。到 json 并在 shellscript 中读取它(或者在 python 中,因为它可以导入 json)。
您可能想研究 groovy 字符串插值规则、shell 引用规则和 shell 扩展。 Groovy 插入字符串,然后通过 shell 引用对其进行求值。这是一场噩梦。 https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4
那么你的脚本也应该被修复——它缺少引用。将其发布到 shellcheck 并实施建议。
请注意,您的文件可能包含尾随换行符。 Shell 命令替换
$(...)
删除尾随换行符。您可能想在 groovy 或 bash 中删除它们。