如何在 Jenkins 脚本化管道中将 bash 命令与 withEnv 一起使用?
How to use bash commands with withEnv in Jenkins Scripted Pipelines?
在 Jenkins 声明式管道中,通过以下方式将环境变量设置为 bash 命令的结果非常容易。
例如,USERNAME
、UID
和 GID
的值设置为它们各自的 bash 命令的结果。
pipeline {
agent {
node {
label 'master'
customWorkspace "some/path"
}
}
environment {
USERNAME = sh(script:"whoami", returnStdout: true).trim()
UID = sh(script:"id -u", returnStdout: true).trim()
GID = sh(script:"id -g", returnStdout: true).trim()
}
如何在使用 Jenkins 脚本化管道时做同样的事情?
例如,假设我有以下 node
块,我在 withEnv
中放什么来达到相同的结果? objective 使得 USERNAME
、UID
和 GID
包含我的 external-test-server
节点上用户的用户名、uid 和 gid。
node('external-test-server') {
stage("Test") {
withEnv([
// Note that the following does not work and is meant to illustrate what my objective is
'USERNAME=${sh(script:"whoami", returnStdout: true).trim()}',
'UID=${sh(script:"id -u", returnStdout: true).trim()}',
'GID=${sh(script:"id -g", returnStdout: true).trim()}'
]) {
dir("../some_path") {
sh "pwd"
}
}
}
}
编辑:
我还需要确保 node('external-test-server')
中的环境变量必须覆盖先前在节点外设置的环境变量。
您的 withEnv
块由于缺少引号而无法正常工作,按照以下内容应该可以正常工作
node {
//initiated some values to make sure withEnv block overrides these
env.USERNAME = "testUser"
env.UID = "99"
env.GID = "99"
stage("Test") {
withEnv([
// This should now work
"USERNAME=${sh(script:"whoami", returnStdout: true).trim()}",
"UID=${sh(script:"id -u", returnStdout: true).trim()}",
"GID=${sh(script:"id -g", returnStdout: true).trim()}"
]) {
dir("myNewPath") {
println USERNAME
println UID
println GID
}
}
}
}
在 Jenkins 声明式管道中,通过以下方式将环境变量设置为 bash 命令的结果非常容易。
例如,USERNAME
、UID
和 GID
的值设置为它们各自的 bash 命令的结果。
pipeline {
agent {
node {
label 'master'
customWorkspace "some/path"
}
}
environment {
USERNAME = sh(script:"whoami", returnStdout: true).trim()
UID = sh(script:"id -u", returnStdout: true).trim()
GID = sh(script:"id -g", returnStdout: true).trim()
}
如何在使用 Jenkins 脚本化管道时做同样的事情?
例如,假设我有以下 node
块,我在 withEnv
中放什么来达到相同的结果? objective 使得 USERNAME
、UID
和 GID
包含我的 external-test-server
节点上用户的用户名、uid 和 gid。
node('external-test-server') {
stage("Test") {
withEnv([
// Note that the following does not work and is meant to illustrate what my objective is
'USERNAME=${sh(script:"whoami", returnStdout: true).trim()}',
'UID=${sh(script:"id -u", returnStdout: true).trim()}',
'GID=${sh(script:"id -g", returnStdout: true).trim()}'
]) {
dir("../some_path") {
sh "pwd"
}
}
}
}
编辑:
我还需要确保 node('external-test-server')
中的环境变量必须覆盖先前在节点外设置的环境变量。
您的 withEnv
块由于缺少引号而无法正常工作,按照以下内容应该可以正常工作
node {
//initiated some values to make sure withEnv block overrides these
env.USERNAME = "testUser"
env.UID = "99"
env.GID = "99"
stage("Test") {
withEnv([
// This should now work
"USERNAME=${sh(script:"whoami", returnStdout: true).trim()}",
"UID=${sh(script:"id -u", returnStdout: true).trim()}",
"GID=${sh(script:"id -g", returnStdout: true).trim()}"
]) {
dir("myNewPath") {
println USERNAME
println UID
println GID
}
}
}
}