stage('adjust Dockerfile') {
steps {
script {
TAG = sh(returnStdout: true, script: 'echo 123456')
sh 'sed -i "s/name:TAG/name:\"${TAG}\"/g" Dockerfile'
}
}
}
结果是在Jenkinsfile的sh命令中未替换变量Tag。
+ 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"
我用正确的值替换了变量TAG,但是sed出现了问题。
+ sed -i s/name:TAG/name:123456
/g Dockerfile
sed: -e expression #1, char 22: unterminated `s' command```
答案 0 :(得分:0)
您应将echo 123456
替换为printf 123456
,因为echo
在末尾添加尾随换行符(稍后会破坏sed命令),并且必须在sed命令中使用双引号为了在其中插入变量:
使用
TAG = sh(returnStdout: true, script: 'printf 123456')
sh 'sed -i "s/name:TAG/name:${TAG}/g" Dockerfile'