我在 Jenkins 中面临一个问题,其中包含特殊字符(特别是 $ 和 =)的秘密在 shell 脚本中使用时会被截断。详情如下:
我在 Jenkins 中有一个秘密,存储以下字符串:
111111-d032-40bd-b87d1153a9430e92$fmN1pdifFkespherhHjIO70KjIzZfqjevCGY3kAbxjU=
我在 Jenkins 管道中使用这个秘密,如下所示:
string(credentialsId: "${env.PREFIX}-mes-client-secret", variable: 'MYSECRET'),
sh "echo MYSECRET ='$MYSECRET' >> ${env.ENV_FILE}"
但是,当我检查 .env 文件中的输出时,字符串在 $ 处被截断并替换为 =
我怀疑 Jenkins 将 $ 误解为变量替换。如何确保秘密正确传递到我的 shell 脚本中而不被截断或更改?
我尝试过的: 将 credentialId 周围的双引号更改为单引号,但这似乎没有按预期工作。 寻找方法来逃避秘密中的 $,但我还没有找到有效的解决方案。
环境: 詹金斯版本:最新 管道类型:声明式 任何帮助或建议将不胜感激!
这个问题与 Jenkins 如何处理包含特殊字符的字符串有关,尤其是 $,它将其解释为变量替换。为了防止 Jenkins 误解你的秘密,你可以尝试以下方法:
string(credentialsId: "${env.PREFIX}-mes-client-secret", variable: 'MYSECRET'),
sh "echo MYSECRET ='\\$MYSECRET' >> ${env.ENV_FILE}"
string(credentialsId: "${env.PREFIX}-mes-client-secret", variable: 'MYSECRET'),
sh 'echo MYSECRET ="$MYSECRET" >> ${env.ENV_FILE}'
withCredentials([string(credentialsId: "${env.PREFIX}-mes-client-secret", variable: 'MYSECRET')]) {
dir("/<your directory>/") {
add_secret_to_file = sh (
returnStdout: true,
script: """
echo MYSECRET ='\\$MYSECRET' >> ${env.ENV_FILE}
"""
)
}
}
或
withCredentials([string(credentialsId: "${env.PREFIX}-mes-client-secret", variable: 'MYSECRET')]) {
dir("/<your directory>/") {
add_secret_to_file = sh (
returnStdout: true,
script: """
echo MYSECRET = $MYSECRET >> ${env.ENV_FILE}
"""
)
}
}