QGA*_*QGA 9 jenkins jenkins-pipeline
如何在Jenkinsfile注入Jenkins时将文本附加到文件中BUILD_ID
我希望看到
version := "1.0.25"
Run Code Online (Sandbox Code Playgroud)
25是 BUILD_ID
这是我的尝试
import hudson.EnvVars
node {
stage('versioning'){
echo 'retrieve build version'
sh 'echo version := 1.0.${env.BUILD_ID} >> build.sbt'
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
version:= 1.0.$ {env.BUILD_ID}:糟糕的替换
请注意该文件位于当前目录中
Ste*_*ain 19
writeFile中构建的管道在这里也非常有用,但需要读写过程才能附加到文件中.
def readContent = readFile 'build.sbt'
writeFile file: 'build.sbt', text: readContent+"\r\nversion := 1.0.${env.BUILD_ID}"
Run Code Online (Sandbox Code Playgroud)
tka*_*usl 16
env.BUILD_ID是一个groovy变量,而不是shell变量.由于你使用单引号(')groovy 不会替换你的字符串中的变量而shell不知道${env.BUILD_ID}.您需要使用双引号"并让groovy进行替换
sh "echo version := 1.0.${env.BUILD_ID} >> build.sbt"
Run Code Online (Sandbox Code Playgroud)
或者使用shell知道的变量
sh 'echo version := 1.0.$BUILD_ID >> build.sbt'
Run Code Online (Sandbox Code Playgroud)
既然你需要用双引号包围的版本,你需要这样的东西:
sh "echo version := \\\"1.0.${env.BUILD_ID}\\\" >> build.sbt"
Run Code Online (Sandbox Code Playgroud)
我使用了肮脏的小包装函数来实现上面 Stefan Crain 的答案:
def appendFile(String fileName, String line) {
def current = ""
if (fileExists(fileName)) {
current = readFile fileName
}
writeFile file: fileName, text: current + "\n" + line
}
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢它,但它确实有效,并且它通过斜杠字符串绕过转义引号,例如:
def tempFile = '/tmp/temp.txt'
writeFile file: tempFile, text: "worthless line 1\n"
// now append the string 'version="1.2.3" # added by appendFile\n' to tempFile
appendFile(tempFile,/version="1.2.3" # added by appendFile/ + "\n")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24863 次 |
| 最近记录: |