-1

現在、特定のユーザー固有のビュー (my-views)によって選択された、Jenkins サーバー上のステータスが "icon-red" のすべてのジョブをトリガーする必要がある状況にあります。問題は、リストが非常に長く、すべてを手動でトリガーしたくないことです。これが、Groovy スクリプト (Jenkins のスクリプト コンソール) を使用するという考えに至った理由です。

次のようなコーディングで、特定のグローバルビューのすべての赤いジョブをトリガーできます。

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()も参照してください)が、どうやら私はそれを理解していません。

ユーザー固有のリスト ビューに関連付けられたアイテムのリストにアクセスする方法の手がかりはありますか?

4

1 に答える 1

0

私は自分でそれを見つけることができたと思います:

  • Jenkins のユーザーの個人的なビューは、特定のユーザーの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())
}
于 2016-05-21T20:57:48.253 に答える