web-dev-qa-db-fra.com

Comment obtenir le BUILD_USER dans Jenkins lorsque le travail est déclenché par une minuterie?

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 ...

9
Musaffir Lp

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  enter image description here

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 ..

11
Musaffir Lp

J'utilise une combinaison du plug-in 'Execute Shell' et 'Env Inject' comme suit:

  1. Créez une étape de construction 'Execute Shell' qui utilise la substitution de paramètre Shell pour écrire la valeur par défaut et faire écho cette valeur dans un fichier. Exemple mis en évidence dans la capture d'écran ci-dessous.
  2. Utilisez le fichier "Env Inject" pour lire ce fichier en tant que propriétés à définir.

 Jenkins build steps to default variables

3
bishop

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}')
2
Kevin Brotcke

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.

2
Dominik Gebhart

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)'
        }
           }

}

1
ShreePrakash

Installez 'Build User Vars Plugin' et utilisez comme suit: - [Voir https://plugins.jenkins.io/build-user-vars-plugin ]

 enter image description here

Assurez-vous de cocher la case Set jenkins user build variables sous Build Environment pour la configuration de votre travail Jenkins.

 enter image description here

1

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

 enter image description here

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.

0
ptha