2016-03-09 30 views

Odpowiedz

17

Czy próbowałeś zainstalować Build User Vars plugin? Jeśli tak, powinieneś być w stanie pracować pod tym kątem lub podobnym.

+3

Dzięki :) działa świetnie Nie wiedziałem o tej wtyczce, sprawdzając informacje o wydaniu, które znalazłem to była ostatnia aktualizacja, wsparcie z wtyczką workflow! super –

+1

Próbuję to z zadaniem rurociągu. Wiki opisuje, że powinien być znacznik wyboru 'Set Jenkins user build variables', ale wydaje się, że jest on dostępny tylko w' projektach Freestyle '. Czy jest coś jeszcze, czego mi brakuje? – dothebart

+1

To pole wyboru dotyczy tylko zadań Freestyle. Ale w przypadku zadań Pipeline, oto jak się dowiedzieć, co jest dostępne. Przewiń do opcji 'wrap: General Build Wrapper' w polu wyboru" Snippet Generator "lub https://your-jenkins.example.com/workflow-cps-snippetizer/dslReference. – MarkHu

3

Jest możliwe, aby to zrobić bez wtyczki (zakładając JOB_BASE_NAME i BUILD_ID są w środowisku):

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() 

Istnieje również GetUserName, która zwraca pełną nazwę użytkownika.

0
//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 
} 
1

Aby pracować z Jenkins Pipeline:

Install build user vars plugin

Następnie uruchom następujące:

pipeline { 
    agent any 

    stages { 
    stage('build user') { 
     steps { 
     wrap([$class: 'BuildUser']) { 
      sh 'echo "${BUILD_USER}"' 
     } 
     } 
    } 
    } 
} 
+0

pracował dla mnie! Dziękuję Ci. –

1

Oto nieco krótsza wersja, która nie wymaga użycia zmienne środowiskowe:

@NonCPS 
def getBuildUser() { 
    return currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId() 
} 

Użycie numeru rawBuild wymaga, aby był w bloku .