В Дженкинс, как сборки узнают, кто их запрашивал? - PullRequest
16 голосов
/ 05 мая 2011

Мне нужно передать имя пользователя, запрашивающего сборку, сценарию, который фактически выполняет эту работу.Если посмотреть на вывод консоли для конкретной сборки, первая строка всегда «Запущена пользователем foo», поэтому Дженкинс четко отслеживает, кто запустил сборку.Так что должна быть возможность передать эту информацию на работу ..... Вопрос в том, как?

Ответы [ 6 ]

14 голосов
/ 16 февраля 2012

user30997

Пожалуйста, проверьте Плагин Jenkins Build User Vars , он делает то, что вам нужно:

Используется для установки следующих переменных сборки пользователя:

  • BUILD_USER - полное имя пользователя, начавшего сборку,
  • BUILD_USER_FIRST_NAME - имя пользователя, начавшего сборку,
  • BUILD_USER_LAST_NAME - фамилия пользователя, начавшего сборку,
  • BUILD_USER_ID - идентификатор пользователя, начавшего сборку.
13 голосов
/ 05 мая 2011

Имя пользователя не указывается в простой для выбора переменной среды, но вы можете получить его, используя xml (или json или python) api - как только вы начнете сборку, http://[jenkins-server]/job/[job-name]/[build-number]/api/xml заполнено с деталями:

<freeStyleBuild>
    <action>
        <cause>
            <shortDescription>Started by user foobar</shortDescription>
            <userName>foobar</userName>
        </cause>
    </action>
    <building>true</building>
    [...]
4 голосов
/ 15 января 2016

Я попытался использовать плагин Jenkins Build User Vars и уведомить комнату HipChat о том, что сборка была запущена определенным пользователем, но переменная BUILD_USER не была доступна для плагина HipChat, возможно, из-за действия HipChat перед тем, как плагин Build User Vars внедряет переменную.

Итак, я установил pre-scm-buildstep plugin и добавил:

enter image description here]

// Inject environment variables using Groovy

import hudson.model.*

def build = Thread.currentThread().executable
def userCause = build.getCause(hudson.model.Cause$UserIdCause)
def userName = userCause?.userId ?: 'Jenkins'

def envVars = ['BUILD_USER': userName]

for (item in envVars) {
  build.addAction(new ParametersAction([
    new StringParameterValue(item.key, item.value)
  ]))
}
2 голосов
/ 16 апреля 2015

В вашей работе добавьте " Выполнить системный скрипт Groovy ":

def yourUserName = build.causes[0].userId
1 голос
/ 19 марта 2013
import os
import jenkinsapi.build
import jenkinsapi.jenkins

#Required Environment variables example:
#JENKINS_URL=http://jenkinsserver/
#JOB_NAME=TEST_GT
#BUILD_NUMBER=8

jenkins_inst = None

def get_jenkins_inst():
    if jenkins_inst == None:
        jenkins_url = os.environ['JENKINS_URL']
        print("Connect to jenkins " + jenkins_url)
        jenkins_inst = jenkinsapi.jenkins.Jenkins(jenkins_url)
    return jenkins_inst

def get_jenkins_job():
    jenkins_inst = get_jenkins_inst()

    jenkins_job_name = os.environ['JOB_NAME']
    print("Get jenkins job " + jenkins_job_name)
    return jenkins_inst.get_job(jenkins_job_name)

def get_jenkins_user():
    jenkins_job = get_jenkins_job()

    jenkins_buildno = int(os.environ['BUILD_NUMBER'])
    print("Get jenkins job build " + str(jenkins_buildno))
    cur_build = jenkins_job.get_build(jenkins_buildno)

    return cur_build.get_actions()['causes'][0]['userId']
0 голосов
/ 15 июня 2017

Мне удалось получить его (в Jenkins 2.58):

currentBuild.getRawBuild().getCauses()[0].getUserId()

Конечно, вам нужно установить разрешения в Jenkins, чтобы иметь возможность вызывать эти методы.Это не всегда объект 0-й причины, который вы ищете, например, он может быть другим, если вы воспроизводите сборку другого пользователя (не проверял это).

...