如何使用Groovy访问Jenkins服务器的用户特定视图的作业?

鹰彩虹

目前,我需要在Jenkins服务器上触发状态为“图标红色”的所有作业,这些作业由给定的特定于用户的视图(my-views)选择。问题在于列表很长,我们不想手动触发它们。这就是为什么我想到使用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()),但显然我没有把握住它。

有什么线索如何访问与用户特定的列表视图关联的项目列表?

鹰彩虹

我想自己设法找到了它:

  • Jenkins中用户的个人视图是给定用户UserProperty一部分
  • 每个用户可能有多个UserProperty-正确的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())
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用单个作业配置在多个从属服务器上运行Jenkins作业?

如何通过aws胶作业从本地oracle服务器上的JDBC数据库访问视图?

从属服务器上的Jenkins作业

如何防止服务器上的用户访问 root 用户?

如何在centos 7服务器上将分支访问权限限制为Git的特定用户?

如何使用 Groovy 从用户中删除特定的 Jenkins 用户权限?

通过特定用户从远程服务器访问 K8S 主服务器

如何在Jenkins Job DSL Groovy脚本中设置监视器视图的作业顺序?

SignalR - 如何访问其他服务器端类中的用户映射以向特定用户发送通知

如何审核用户并访问服务器上的SSH尝试?

如何在服务器上访问用户的日历信息?

如何使用 Java 从特定服务器访问数据库?

如何从 Jenkins 构建作业在 Linux 部署服务器上部署 docker-compose 文件?

如何在多个虚拟服务器上运行Jenkins作业?

限制对特定用户的远程桌面访问到域环境中的特定服务器?

如何在 jenkins 服务器中使用 json 文件?

如何使用jenkins的远程docker服务器?

如何使用服务器操作打开表单视图?

用户未登录服务器时,SQL作业失败

如何在EJS视图中使用momet js,但获取用户本地时间而不是服务器时间?

在特定时间访问服务器

如何使用javascript从Microsoft Exchange服务器访问邮件?

如何使用 MySQL Workbench 公开访问 mysql 服务器?

如何使用Windows对服务器进行Django远程访问

如何使用HTTPOnly访问服务器端的凭据?

如何使用 SSH 访问远程服务器上的端口?

如何使用外部IP地址访问UDP服务器

如何使用本地DNS访问多个服务器

如何使用特定正文发出 HTTP 发布请求?以及如何从服务器访问令牌以允许我登录?