stage('build') {
environment {
WORKDIR="""${sh(
returnStdout: true,
script: 'pwd'
)}"""
}
steps {
timeout(time: 5, unit: 'MINUTES') {
sh "usermod -d ${WORKDIR} jenkins"
}
}
}
以上结果给出
usermod -d / var / lib / jenkins / workspace / -www_feature_ci-integration-GWZMSYY6XHJA7QDBD4KWGXZCOVUKOBI35JMKYOQV76QXZTCYE6CA
用法:usermod [选项]登录
我指定的用户jenkins
发生了什么,似乎已经从命令中删除了。有办法保存它吗?
答案 0 :(得分:1)
使用sh
调用returnStdout: true
方法时,通常会在输出中返回换行符。如果将此输出分配给变量,则结果字符串值还将包含换行符。这意味着您的sh "usermod -d ${WORKDIR} jenkins"
将是usermod -d /var/lib/jenkins/workspace/-www_feature_ci-integration-GWZMSYY6XHJA7QDBD4KWGXZCOVUKOBI35JMKYOQV76QXZTCYE6CA\n jenkins"
。然后,该命令将在没有jenkins
用户参数的情况下执行。
要解决此问题,您可以使用.trim()
方法删除换行符(和尾随空格)。
这可以通过以下任意一种方法轻松完成:
WORKDIR="""${sh(
returnStdout: true,
script: 'pwd'
).trim()}"""
在分配过程中,或:
sh "usermod -d ${WORKDIR.trim()} jenkins"
在字符串插值期间。