stage('adjust Dockerfile') {
steps {
script {
TAG = sh(returnStdout: true, script: 'echo 123456')
sh 'sed -i "s/name:TAG/name:\"${TAG}\"/g" Dockerfile'
}
}
}
结果是在Jenkinsfile的sh命令中变量标记没有被替换。
+ sed -i s/name:TAG/name:/g Dockerfile
如果我更改为
TAG = sh(returnStdout: true, script: 'echo 123456')
sh 'sed -i "s/name:TAG/name:${TAG}/g" Dockerfile'
如果我像这样改变引号
TAG = sh(returnStdout: true, script: 'echo 123456')
sh "sed -i 's/name:TAG/name:${TAG}/g' Dockerfile"
我将变量标记替换为正确的值,但sed出现问题。
+ sed -i s/name:TAG/name:123456
/g Dockerfile
sed: -e expression #1, char 22: unterminated `s' command```
发布于 2019-12-12 21:02:21
您应该将echo 123456
替换为printf 123456
,因为echo
在末尾添加了一个尾随换行符(这会在稍后破坏sed命令),并且您必须在sed命令两边使用双引号,以便在其中插入变量:
使用
TAG = sh(returnStdout: true, script: 'printf 123456')
sh 'sed -i "s/name:TAG/name:${TAG}/g" Dockerfile'
发布于 2021-08-18 05:41:50
伙计们试着在你的jenkinsfile文件里这么做
使用sh 'sed -i "s#name:TAG#name:${TAG.trim()}#" Dockerfile'
https://stackoverflow.com/questions/59105290
复制相似问题