2016-05-18 1 views
-1

В настоящее время у меня возникает ситуация, когда мне нужно вызвать все задания в статусе «icon-red» на сервере Jenkins, которые выбираются данным пользователем -специфическим видом (моими видами). Проблема в том, что список очень длинный, и мы не хотим запускать их вручную. Вот почему я пришел к идее использования скрипта Groovy (консоль сценариев Jenkins).Как я могу получить доступ к заданию пользовательского представления Jenkins Server с помощью Groovy?

Я могу вызвать все красные рабочие места данной глобальной зрения с кодирования:

def viewName = "globalviewname" 
def jobsToBuild = Jenkins.instance.getView(viewName).items.findAll { job -> 
    job.getBuildStatusIconClassName() == "icon-red" 
} 

jobsToBuild.each { job -> 
    println "Scheduling matching job ${job.name}" 
    job.scheduleBuild(new Cause.UserIdCause()) 
} 

Однако, я не хватает способ, как открыть представление текущего пользователя (станет параметром позже): вызов

Jenkins.instance.getViews()

только предоставляет список только всех глобальных взглядов. Сейчас я играю с

Jenkins.instance.getMyViewsTabBar()

(см также http://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html#getMyViewsTabBar()), но, видимо, я не получаю повесить его.

Любая подсказка, как получить доступ к списку элементов, связанных с просмотрами списка конкретных пользователей?

ответ

0

Я думаю, что мне удалось найти это сам:

  • Личные взгляды пользователя в Дженкинс являются частью UserProperties данного пользователя.
  • На пользователя может быть несколько UserProperties - правильный UserProperty - MyViewProperty.

Предполагая, что переменная username содержит имя пользователя, зрения мы хотим получить и переменной viewname содержит имя вида, который мы хотим получить, следующий Прототипом Groovy кодирование делает трюк для меня:

def user = User.get(username, false, null) 
if (user == null) { 
    throw new Error("User does not exists") 
} 
println "Reading data from user "+user.toString() 

// retrieve all UserProperties of this user and filter on the MyViewsProperty 
def allMyViewsProperties = user.getAllProperties().findAll { 
    uprop -> (uprop instanceof hudson.model.MyViewsProperty) 
} 
if (allMyViewsProperties.size() == 0) { 
    throw new Error("MyViewsProperties does not exists") 
} 

// retrieve all views which are assigned to the MyViewsProperty. 
// note that there also is a AllViewsProperty 
def allPersonalViewsOfUser = allMyViewsProperties[0].getViews() 

// further narrow down only to ListViews (special use case for me) 
def allPersonalListViews = allPersonalViewsOfUser.findAll { 
    view -> view instanceof hudson.model.ListView 
} 

// based on its name, filter on the view we want to retrieve 
def listView = allPersonalListViews.findAll { view -> viewname.equals(view.getViewName()) } 
if (listView.size() != 1) { 
    throw new Error("selected view does not exist"); 
} 

// get the view now 
def view = listView[0] 

Учитывая все это, теперь легко запускать все задания в состоянии красного цвета этой точки зрения, запустив

def jobsToBuild = view.items.findAll { job -> 
    job.getBuildStatusIconClassName() == "icon-red" 
} 

jobsToBuild.each { job -> 
    println "Scheduling matching job ${job.name}" 
    job.scheduleBuild(new Cause.UserIdCause()) 
} 
Смежные вопросы