我目前正在尝试在Jenkins的声明式管道内部执行以下操作。我在文件中有一个证书,并且试图将其放入kubernetes秘密中。现在我的问题是以下。
由于文件包含换行符,将其作为参数传递给kubectl将在此结束输入,命令将失败。所以我需要换行。我的方法是以下
现在在外壳中,它可以正常工作
cat ./certs/mycert.pem | base64 | sed ':a;N;$!ba;s/\n/\\n/g'
但是尝试在Jenkinsfile中将其用作
sh(script: "cat ./certs/key.pem | base64 | sed ':a;N;$!ba;s/\n/\\n/g'", returnStdout: true);
将因错误而失败
美元符号后的非法字符串体字符;
好吧,这很容易。我可以逃脱美元符号,但不幸的是事情还没有到此结束。然后我会得到错误
sed:-e表达式#1,字符10:未终止的“ s”命令
我可以继续尝试两次逃避所有操作,这将使sed停止失败,但是输出没有\ n,而只是常规换行符。
有什么想法可以在我的sh方法中正确使用此正则表达式吗?
答案 0 :(得分:2)
因此,有3种主要变体:
drf
转义所有特殊符号(在您的情况下为$
和\
)\
def b = sh(script: "cat ./certs/mycert.pem | base64 | sed ':a;N;\$!ba;s/\\n/\\\\n/g'", returnStdout: true)
def b = sh(script: $/cat ./certs/mycert.pem | base64 | sed ':a;N;$!ba;s/\n/\\n/g'/$, returnStdout: true)
无需替换def b = new File('./certs/mycert.pem').bytes.encodeBase64().toString()
,因为encodeBase64()
返回单行base64值