我有一个带有String参数env_vars
的Jenkinsfile。使用此参数,我想设置自定义环境变量,我希望稍后在启动的Docker容器中使用shell命令进行设置。在运行时设置这样的环境变量很重要。
这是我的简单Jenkinsfile
:
pipeline {
options {
timestamps()
}
agent {
node {
label 'master'
}
}
parameters {
string(name: 'env_vars', defaultValue: 'MY_USER_PASSWORD=abc MY_USER_NAME=def', description: 'the ENV variables to set before starting the tests')
}
stages {
stage ('TESTS') {
steps {
script {
withDockerRegistry([credentialsId: 'XXX', url: 'http://example.com']) {
withDockerContainer(image: 'myDockerImage:latest') {
withCredentials([string(credentialsId: 'cred1', variable: 'cred1'), string(credentialsId: 'cred2', variable: 'cred2')]) {
sh '''
# here we go to run npm
${env_vars} npm run test -- chrome --tag=enabled
'''
}
}
}
}
}
}
}
}
这个错误我会在Jenkins中得到:
/var/lib/jenkins/jenkins3/jobs/zTestMG/workspace@tmp/durable-40340d0e/script.sh: line 4: MY_USER_PASSWORD=abc: command not found
一种可能的解决方法是使用eval
作为shell命令:
eval "${env_vars} npm run test -- chrome --tag=enabled"
但我不想使用eval,因为稍后我必须评估npm run
命令的结果。使用eval
时,我会遇到新问题。
如何解决在Docker容器中的shell命令中使用String参数的问题?
答案 0 :(得分:0)
我找到了一个可能的解决方案。我用两个不同的命令替换我的shell命令:
export ${env_vars}
npm run ${run_script_method} -- ${browser} --tag=${tags}