Exécution d'un travail en amont appelé "A". En cas de succès de A exécutant des cas de test qui est en aval du projet "B". Mais lors de l'envoi de courrier depuis B, nous devons incorporer les détails du projet en amont (nom du projet en amont, build no) dans le courrier. Nous pouvons donc facilement mapper/corréler le test avec le travail en amont respectif.
Dans le tableau de bord du projet en aval ci-dessous, les détails s'affichent.
Started by upstream project Dev_RM_3.0_CI_Test build number 10
originally caused by:
Je me suis enregistré https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project . mais je n'ai rien trouvé à hériter en aval.
Exemple de travail créé avec les détails ci-dessous pour afficher les détails du travail actuel.
echo $BUILD_NUMBER
echo $JOB_NAME
echo $BUILD_ID
Mais la sortie est
Building on master in workspace /var/lib/jenkins/workspace/env
[env] $ /bin/sh -xe /tmp/hudson970280339057643719.sh
+ echo 1
1
+ echo env
env
+ echo 1
1
Finished: SUCCESS
Le message que vous référez à votre question "Started by upstream project "Chained/1-First
"numéro de build 34" par exemple, est disponible dans jenkins Cause .
Jenkins conserve les informations de construction en amont dans son objet cause. Si vous utilisez build DSL ou Pipelines, vous pouvez l'obtenir dans groovy. Vous pouvez également curl
l'url du travail et utiliser jq
pour obtenir la cause
Par exemple curl http: // localhost: 8080/job/Chained/job/2-Second/17/api/json
"_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
"actions": [{
"_class": "hudson.model.CauseAction",
"causes": [{
"_class": "hudson.model.Cause$UpstreamCause",
"shortDescription": "Started by upstream project \"Chained/1-First\" build number 34",
"upstreamBuild": 34,
"upstreamProject": "Chained/1-First",
"upstreamUrl": "job/Chained/job/1-First/"
}]
}
Ou depuis le pipeline par exemple:
node() {
stage('downstream') {
def upstream = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause)
echo upstream?.shortDescription
}
}
Vous pouvez obtenir un tas d'informations sur Cause , en attendant toutes les approbations de script ou une étape partagée globale. Vous obtiendrez une valeur nulle si une cause différente déclenche cette génération, par exemple, commit ou user.
Vous pouvez transmettre les variables en amont via des paramètres de génération au travail en aval, puis vous pouvez y accéder (dans le travail en aval) en utilisant des éléments tels que $ {MyParameter1} et $ {MyParameter2}.
Vous devrez:
ParentJobName=${JOB_NAME}
Vous devriez pouvoir passer les choses de base de cette façon. Quoi de plus compliqué que cela et vous ferez probablement mieux d'utiliser un plugin comme Copy Artifacts Plugin pour copier des fichiers ou utiliser l'API Jenkins dans une étape groovy du système pour obtenir/modifier la construction en amont, etc.
Vous pouvez simplement utiliser params.variableName dans votre travail en aval pour récupérer les paramètres transmis à partir de votre travail de paramètre en amont. Votre travail en aval ne doit pas nécessairement être un travail paramétré.
Extension de la réponse @razboy: c'est un bon moyen si Cause ne peut pas être ajouté à la liste blanche dans le bac à sable. J'ai oublié l'API Jenkins et utilisé la console de construction actuelle pour rechercher une chaîne sur la cause du déclencheur. Vous pouvez essayer de récupérer des données de l'API en tant que @razboy ou obtenir la console actuelle et la récupérer si vous avez besoin de choses simples. L'API Jenkins est plus flexible pour une logique plus complexe. Pour obtenir de l'aide sur l'API, ajoutez/api à votre URL de génération: <jenkins_url>/job/<buildUrl>/<buildNumber>/api
def buildUrl = env.BUILD_URL
sh "wget $buildUrl -O currentConsole.txt"
statusCode = sh returnStatus: true,script: 'cat currentConsole.txt | grep -q "Started by upstream project"'
boolean startedByUpstream= statusCode==0