我在基于Groovy的Jenkinsfile中遇到了一个非常奇怪的问题。我有一个变量,我需要在我的shell脚本中替换docker容器的名称。但无论我怎么尝试,它都无法读取该变量。这让它变得很奇怪,因为我可以在脚本语句之前和之后读取变量的值,但不能在脚本语句内部读取。
有人能解释一下为什么会出现这个问题以及如何解决这个问题吗?
我档案里的一部分-
stage('Snyk Scan') {
if (params.buildDockerImage == 'true') {
println(ANSI_BOLD + ANSI_GREEN + "build_tag with value as: " + build_tag + ANSI_NORMAL) // this works
sh("echo build tag is ${build_tag}") // this works too
sh '''
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"
snyk container test ${hub_org}/player:${build_tag} --json | snyk-to-html -d -o snyk_results.html
'''
sh("echo build tag is ${build_tag}") // even this works
}
}
当我看到控制台输出时,它是-
22:54:42 + snyk container test registery/sunbidrded/player: --json
22:54:42 + snyk-to-html -d -o snyk_results.html
22:54:47 Vulnerability snapshot saved at snyk_results.html
[Pipeline] sh
22:54:47 + echo build tag is container_scanning_ad2aecee29_23
22:54:47 build tag is container_scanning_ad2aecee29_23
正如你在build_tag
后面的snyk container test registery/sunbidrded/player:
部分看到的,冒号build_tag
总是空白的。
我试过将${hub_org}/player:${build_tag}
放在双引号内,也试过将字符串存储在变量中,然后在语句中替换它,但这也不起作用。
我在这里定义了build_tag-
node('build-slave') {
try {
String ANSI_GREEN = "\u001B[32m"
... // (other color variables)
ansiColor('xterm') {
timestamps {
stage('Checkout') {
if (!env.hub_org) {
println(ANSI_BOLD + ANSI_RED + "Uh Oh! Please set a Jenkins environment variable named hub_org with value as registery/sunbidrded" + ANSI_NORMAL)
error 'Please resolve the errors and rerun..'
} else {
println(ANSI_BOLD + ANSI_GREEN + "Found environment variable named hub_org with value as: " + hub_org + ANSI_NORMAL)
}
}
// cleanWs()
checkout scm
commit_hash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
build_tag = sh(script: "echo " + params.github_release_tag.split('/')[-1] + "_" + commit_hash + "_" + env.BUILD_NUMBER, returnStdout: true).trim()
echo "build_tag: " + build_tag
stage('Customize dependencies') {
...
}
stage('Snyk Setup') {
...
}
...
1条答案
按热度按时间ogq8wdun1#
@Matthew Schuchard给出的见解是正确的。它帮助我确定了问题到底是什么。
我只需要做进一步的小修改,就可以执行NVM命令,并将变量
build_tag
替换为-