jenkins - 在 Jenkinsfile 中使用变量时如何保留所有 shell 命令
问题描述
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 [选项] LOGIN
我指定的用户发生了什么jenkins
,似乎已从命令中删除。有办法保存吗?
解决方案
使用 调用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"
在字符串插值期间。
推荐阅读
- reactjs - 如何从地图功能中仅选择一个元素?
- java - Azure 存储 blob 客户端加密不解密 Java
- c - 如何不使指向数组 [0] 的指针在每个周期修改数组 [0]
- c++ - 我可以使用 stb_image_write.h 将 JPG 图像写入内存吗?
- kotlin - Kotlin 继承问题 - 固有的类类型转换
- c++ - 我在 c++ 中的 AES 代码有问题。明文在变化,但加密的消息是一样的。我找不到我的错误
- laravel - 在虚拟主机中的 nginx.conf 中安装 laravel 错误
- php - 按月显示事件 (cpt)
- javascript - React 表排序不一致,它不断变回默认状态
- javascript - 使用 cookie-parser 解码 Cookie