web-dev-qa-db-fra.com

Comment ajouter un texte à un fichier dans jenkinsfile

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

9
QGA

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"
14
tkausl

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}"
19
Stefan Crain