(mise à jour ci-dessous)
J'ai un travail de pipeline déclaratif qui peut prendre un argument VERSION.
pipeline {
parameters {
string(name: VERSION, defaultValue: '')
}
// ...
}
Si aucune VERSION n'est donnée, comme lorsque Gitlab envoie un crochet à ce travail, je veux le calculer à partir de git, je fais donc quelque chose comme ça
stages {
stage('Prepare') {
steps {
// ...
if (! env.VERSION) {
VERSION = sh(script: "git describe", returnStdout: true).trim()
}
}
}
}
Maintenant, je veux "injecter" cette variable à
J'ai essayé de changer le code ci-dessus avec
stages {
stage('Prepare') {
steps {
// ...
if (! env.VERSION) {
env.VERSION = sh(script: "git describe", returnStdout: true).trim()
}
}
}
}
Vous avez cette erreur groovy.lang.MissingPropertyException: No such property: VERSION for class: groovy.lang.Binding
J'ai ensuite essayé d'ajouter une étape "environnement" ci-dessous
environment {
VERSION = ${VERSION}
}
mais cela n'a pas résolu mon problème.
Je cherche de l'aide pour le résoudre.
METTRE À JOUR
J'ai maintenant un pipeline de travail qui ressemble à
pipeline {
agent any
parameters {
string(name: 'VERSION', defaultValue: '')
}
environment {
def VERSION = "${params.VERSION}"
}
stages {
stage('Prepare & Checkout') {
steps {
script {
if (! env.VERSION) {
VERSION = sh(script: "date", returnStdout: true).trim()
}
echo "** version: ${VERSION} **"
}
}
}
stage('Build') {
steps {
// sh "./build.sh"
echo "** version2: ${VERSION} **"
}
}
} // stages
post {
always {
mail to: '[email protected]',
subject: "SUCCESS: ${VERSION}",
body: """<html><body><p>SUCCESS</p></body></html>""",
mimeType: 'text/html',
charset: 'UTF-8'
deleteDir()
}
}
} // pipeline
J'avais besoin d'ajouter l'étape "environment" pour pouvoir obtenir $ VERSION à toutes les étapes (et pas seulement à l'étape où elle est manipulée).
Je dois encore trouver un moyen d'injecter cette variable $ VERSION dans les variables d'environnement, afin que mon script de construction puisse le trouver.
Si vous souhaitez injecter la variable dans l'environnement afin de pouvoir l'utiliser ultérieurement, vous pouvez définir une autre variable égale à env.VERSION ou à la sortie du script Shell. Puis utilisez cette variable dans votre pipeline, par exemple:
pipeline {
parameters {
string(name: VERSION, defaultValue: '')
}
def version = env.VERSION
stages {
stage('Prepare') {
steps {
// ...
if (!version) {
version = sh(script: "git describe", returnStdout: true).trim()
}
}
}
mail subject: "$version build succeeded", ...
}
Si vous souhaitez que d'autres travaux puissent accéder à la valeur de VERSION après l'exécution de la génération, vous pouvez l'écrire dans un fichier et l'archiver.
Edit: Pour que votre script puisse utiliser la variable de version, vous pouvez lui demander de prendre version comme paramètre ou vous pouvez utiliser l’étape withEnv .
En supposant que vous utilisez Pipelines paramétrés , vous devez appeler la variable en tant que ${params.parameterName}
Bien que les paramètres soient disponibles dans env, ils sont actuellement créés avant la première exécution du pipeline. Vous devez donc y accéder via les paramètres:
Dans ton cas:
${params.VERSION}