如何在jenkinsfile中向文件追加文本

4jb9z9bj  于 2023-01-04  发布在  Jenkins
关注(0)|答案(3)|浏览(272)

如何将文本附加到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. ${环境构建ID}:不良代换
请注意,该文件位于当前目录中

rseugnpd

rseugnpd1#

writeFile中内置的管道在这里也非常有用,但是需要一个读+写过程来附加到文件。

def readContent = readFile 'build.sbt'
writeFile file: 'build.sbt', text: readContent+"\r\nversion := 1.0.${env.BUILD_ID}"
t5zmwmid

t5zmwmid2#

env.BUILD_ID是groovy变量,而不是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"
kq0g1dla

kq0g1dla3#

我已经使用了dirty little wrapper函数来实现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")

相关问题