J'utilise le plug-in Pipeline dans Jenkins de Clouldbees (le nom était auparavant appelé Workflow), j'essaie d'obtenir le nom d'utilisateur dans le script Groovy mais je ne parviens pas à le réaliser.
stage 'checkout svn'
node('master') {
// Get the user name logged in Jenkins
}
Avez-vous essayé d'installer le plugin Build User Vars ? Si oui, vous devriez pouvoir courir
node {
wrap([$class: 'BuildUser']) {
def user = env.BUILD_USER_ID
}
}
ou similaire.
Il est possible de faire cela sans plugin (en supposant que JOB_BASE_NAME
et BUILD_ID
sont dans l'environnement):
def job = Jenkins.getInstance().getItemByFullName(env.JOB_BASE_NAME, Job.class)
def build = job.getBuildByNumber(env.BUILD_ID as int)
def userId = build.getCause(Cause.UserIdCause).getUserId()
Il existe également un getUserName, qui renvoie le nom complet de l'utilisateur.
Pour que cela fonctionne avec Jenkins Pipeline:
Installer plugin utilisateur build vars
Puis lancez ce qui suit:
pipeline {
agent any
stages {
stage('build user') {
steps {
wrap([$class: 'BuildUser']) {
sh 'echo "${BUILD_USER}"'
}
}
}
}
}
Voici une version légèrement plus courte qui ne nécessite pas l'utilisation de variables d'environnement:
@NonCPS
def getBuildUser() {
return currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
}
L'utilisation de rawBuild
nécessite qu'il soit dans un bloc @NonCPS
.
def jobUserId, jobUserName
//then somewhere
wrap([$class: 'BuildUser']) {
jobUserId = "${BUILD_USER_ID}"
jobUserName = "${BUILD_USER}"
}
//then
println("Started By: ${jobUserName}")
Nous utilisions ce plugin: Build User Vars Plugin . Plus de variables sont disponibles.
J'ai modifié la réponse de @shawn derik pour qu'elle fonctionne dans mon pipeline:
stage("preserve build user") {
wrap([$class: 'BuildUser']) {
GET_BUILD_USER = sh ( script: 'echo "${BUILD_USER}"', returnStdout: true).trim()
}
}
Je pourrai ensuite référencer cette variable ultérieurement en la passant ou dans la même portée que $ {GET_BUILD_USER}. J'ai installé le même plugin référencé.
//Below is a generic groovy function to get the XML metadata for a Jenkins build.
//curl the env.BUILD_URL/api/xml parse it with grep and return the string
//I did an or true on curl, but possibly there is a better way
//echo -e "some_string \c" will always return some_string without \n char
//use the readFile() and return the string
def GetUserId(){
sh """
/usr/bin/curl -k -s -u \
\$USERNAME:\$PASSWORD -o \
/tmp/api.xml \
\$BUILD_URL/api/xml || true
THE_USERID=`cat /tmp/api.xml | grep -oP '(?<=<userId>).*?(?=</userId>)'`
echo -e "\$THE_USERID \\c" > /tmp/user_id.txt
"""
def some_userid = readFile("/tmp/user_id.txt")
some_userid
}