Je voulais montrer à l'utilisateur qui a déclenché un travail Jenkins dans le courrier électronique post-job. Ceci est possible en utilisant le plugin Build User Vars Plugin et la variable env BUILD_USER
. Mais cette variable n'est pas initialisée lorsque le travail est déclenché par un planificateur.
Comment pouvons-nous y parvenir? Je sais que nous avons un plugin appelé - EnvInject Plugin, et qui peut être utilisé ...
Mais je veux juste savoir comment nous pouvons utiliser cela et parvenir à la solution ...
Ceci est très possible dans Jenkins Il existe un plugin appelé -Build User Vars Plugin to Jenkins qui expose un ensemble de variables d’environnement décrivant l’utilisateur qui a démarré la construction . Il donne une variable env comme BUILD_USER_ID, EMAIL, etc. ..
Cela fonctionnera bien lorsque la construction sera déclenchée manuellement par un utilisateur connecté et donnera ce nom d'utilisateur pour BUILD_USER_ID.
Comment jamais cette variable env ne sera pas remplacée/initialisée lorsque la construction est déclenchée automatiquement par le timer/scheduler de Jenkins
Ci-joint une capture d'écran pour plus de détails
Ce problème peut être résolu en injectant une condition dans le travail à l'aide du plug-in Condition Conduction Étape Plugin/Condition Condition, dans lequel, pour chaque travail, nous pouvons ajouter une condition pour initialiser la variable BUILD_USER_ID uniquement lorsque la construction est provoquée ou déclenchée par le programmateur , en définissant une condition à l'aide de l'expression régulière ..
J'utilise une combinaison du plug-in 'Execute Shell' et 'Env Inject' comme suit:
Le plugin Build user vars ne fonctionnait pas pour moi, alors j'ai fait un tour de passe-passe:
BUILD_CAUSE_JSON=$(curl --silent ${BUILD_URL}/api/json | tr "{}" "\n" | grep "Started by")
BUILD_USER_ID=$(echo $BUILD_CAUSE_JSON | tr "," "\n" | grep "userId" | awk -F\" '{print $4}')
BUILD_USER_NAME=$(echo $BUILD_CAUSE_JSON | tr "," "\n" | grep "userName" | awk -F\" '{print $4}')
Le jeton $ BUILD_CAUSE du plugin email-ext est ce que vous recherchez.
Vous pouvez voir la référence complète du jeton de contenu lorsque vous cliquez sur le bouton ? juste après la liste déroulante Attach build log lors de la configuration du contenu du courrier électronique.
Certains jetons sont ajoutés par des plugins, mais celui-ci devrait être disponible par défaut.
Edit: Comme bishop l’a souligné dans les commentaires, lors de l’utilisation du plugin EnvInject , le jeton $ BUILD_CAUSE est modifié pour se comporter différemment.
Je voulais déclencher les informations de l'initiateur de la construction sur l'un de mes groupes slack/flock, j'ai donc utilisé la méthode suivante pour obtenir le nom et l'adresse électronique de l'initiateur de la construction en écrivant de manière déclarative.
J'imprime juste ici, vous pouvez utiliser pour stocker dans une variable d'environnement ou écrire dans un fichier en donnant le chemin du fichier selon votre convenance.
pipeline {
environment {
BRANCH_NAME = "${env.BRANCH_NAME}"
}
agent any
stages{
stage('Build-Initiator-Info'){
sh 'echo $(git show -s --pretty=%ae)'
sh 'echo $(git show -s --pretty=%an)'
}
}
}
Installez 'Build User Vars Plugin' et utilisez comme suit: - [Voir https://plugins.jenkins.io/build-user-vars-plugin ]
Assurez-vous de cocher la case Set jenkins user build variables
sous Build Environment
pour la configuration de votre travail Jenkins.
Juste pour élaborer/ réponse de Musaffir Lp . Le plugin Conditional Step Step plugin supporte maintenant la cause Build Cause directement - il nécessite le plugin Run Condition Plugin .
Si vous voulez détecter quand la compilation a été lancée par une minuterie, vous pouvez sélectionner un Run? valeur de cause de construction, avec cause de construction de: TimerTrigger
C'est un peu plus simple et plus robuste que d'utiliser une regex. Il existe également d'autres déclencheurs que vous pouvez détecter, par exemple lorsque la construction est le résultat d'une validation de la part de Source Control Management, vous pouvez sélectionner: SCMTrigger.