Comment ajouter un texte à un fichier dans Jenkinsfile
en injectant Jenkins BUILD_ID
Je souhaite voir
version := "1.0.25"
où 25 est BUILD_ID
Voici ma tentative
import hudson.EnvVars
node {
stage('versioning'){
echo 'retrieve build version'
sh 'echo version := 1.0.${env.BUILD_ID} >> build.sbt'
}
}
Erreur:
version: = 1.0. $ {env.BUILD_ID}: mauvaise substitution
Notez que le fichier se trouve dans le répertoire courant
env.BUILD_ID
est une variable groovy, pas une variable Shell. Puisque vous avez utilisé des guillemets simples ('
) groovy va pas remplacer les variables de votre chaîne et le Shell ne sait pas ${env.BUILD_ID}
. Vous devez utiliser des guillemets doubles "
et laissez groovy faire la substitution
sh "echo version := 1.0.${env.BUILD_ID} >> build.sbt"
ou utilisez la variable que Shell connaît
sh 'echo version := 1.0.$BUILD_ID >> build.sbt'
et puisque vous avez besoin de la version entourée de guillemets doubles, vous auriez besoin de quelque chose comme ceci:
sh "echo version := \\\"1.0.${env.BUILD_ID}\\\" >> build.sbt"
Le pipeline intégré à writeFile est également très utile ici mais nécessite un processus de lecture + écriture pour être ajouté à un fichier.
def readContent = readFile 'build.sbt'
writeFile file: 'build.sbt', text: readContent+"\r\nversion := 1.0.${env.BUILD_ID}"