如何在Jenkinsfile
注入Jenkins BUILD_ID
我希望看到
version := "1.0.25"
其中25是BUILD_ID
这是我的尝试
import hudson.EnvVars
node {
stage('versioning'){
echo 'retrieve build version'
sh 'echo version := 1.0.${env.BUILD_ID} >> build.sbt'
}
}
错误:
版本:= 1.0。$ {env.BUILD_ID}:错误替换
请注意,该文件位于当前目录
中答案 0 :(得分:16)
writeFile内置的管道在这里也非常有用,但需要读写过程才能附加到文件中。
def readContent = readFile 'build.sbt'
writeFile file: 'build.sbt', text: readContent+"\r\nversion := 1.0.${env.BUILD_ID}"
答案 1 :(得分:14)
env.BUILD_ID
是一个常规变量,而不是shell变量。由于您使用单引号('
)groovy将不替换字符串中的变量,而shell并不了解${env.BUILD_ID}
。您需要使用双引号"
并让groovy执行替换
sh "echo version := 1.0.${env.BUILD_ID} >> build.sbt"
或使用shell知道的变量
sh 'echo version := 1.0.$BUILD_ID >> build.sbt'
既然你需要用双引号包围的版本,你需要这样的东西:
sh "echo version := \\\"1.0.${env.BUILD_ID}\\\" >> build.sbt"
答案 2 :(得分:1)
我已经使用了肮脏的小包装函数来实现Stefan Crain的上述回答:
def appendFile(String fileName, String line) {
def current = ""
if (fileExists(fileName)) {
current = readFile fileName
}
writeFile file: fileName, text: current + "\n" + line
}
我真的不喜欢它,但是它确实可以解决问题,并且它会通过粗斜线字符串将转义的引号引起来,例如:
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")
答案 3 :(得分:-2)
您可以借助以下sh步骤来写入文件
def output= ‘version := “1.0.’+BUILD_ID+’”’
sh script: “echo ${output} >> file.txt”