网站vr的建设,支部建设杂志官方网站,电商seo是什么意思,抖音广告怎么投放jenkins api这篇文章从本教程的第1部分继续。 已经快一年了#xff0c;但是我终于有时间重新审视我为与Jenkins api交互而编写的一些代码。 我已经使用了部分工作来帮助管理许多Jenkins构建服务器#xff0c;主要是保持插件同步以及将作业从一台机器移动到另一台机器。 在本文… jenkins api 这篇文章从本教程的第1部分继续。 已经快一年了但是我终于有时间重新审视我为与Jenkins api交互而编写的一些代码。 我已经使用了部分工作来帮助管理许多Jenkins构建服务器主要是保持插件同步以及将作业从一台机器移动到另一台机器。 在本文中我将主要关注CLI jar功能以及您可以使用它进行的一些操作。 这主要是针对Jenkins开发的但是我对Hudson进行了一些轻量级测试并且可以在我尝试过的所有地方工作因此对于您选择的构建服务器代码始终是不可知的。 项目结构 该代码托管在Github上 并提供一个Gradle构建该构建可在本地下载并启动Jenkins或Hudson服务器以执行测试。 服务器设置为使用Gradle构建目录作为其工作目录因此只需执行gradle clean即可将其删除。 我使用所需库的Jenkins版本和Hudson版本进行了尝试除了两个CLI实现之间的一些古怪之处外它们的功能仍然相同。 如果要使用Hudson而不是Jenkins进行尝试请传递命令标志-Pswitch并将使用适当的war和库。 该项目旨在与Gradle 1.0-milestone-8一起运行并附带该版本的Gradle包装器 。 自原始文章以来大多数代码都保持不变但是对Jenkins和Hudson的较新版本进行了一些增强和更改。 这个项目产生的库以Maven工件的形式发布稍后我将确切描述如何获得它。 还包括一些示例这些示例演示了在Gradle或Maven项目中以及在Grapes的Groovy脚本中如何使用该库。 我们正在使用Groovy 1.8.6Gradle 1.0-milestone-8和Maven 3.0.3来构建所有内容。 充分利用CLI 作为api的替代CLI jar是一种非常强大的与构建服务器进行交互的方式。 除了各种内置命令之外Groovy脚本还可以远程执行而我们只需付出一点努力就可以轻松地序列化响应以处理服务器上提取的数据。 作为执行环境服务器提供了Groovysh shell并为hudson.model包存储了导入内容 。 该包中Jenkins / Hudson单例对象的实例也传递到Binding中。 在这些示例中我使用的是向后兼容的Hudson版本因为该代码旨在在两种服务器上均可运行。 可用命令 内置命令种类繁多所有这些命令均在hudson.cli包中实现。 以下是正在运行的应用程序的CLI页面上列出的内容 build构建作业并且可以选择等待直到完成。 cancel-quiet-down取消“ quiet-down”命令的效果。 clear-queue清除构建队列 connect-node重新连接到节点 复制作业复制一份工作。 create-job通过读取stdin作为配置XML文件来创建新作业。 delete-builds删除构建记录。 delete-job删除工作 delete-node删除节点 disable-job禁用工作 断开节点与节点断开连接 enable-job启用工作 get-job将作业定义XML转储到stdout groovy执行指定的Groovy脚本。 groovysh运行交互式groovy shell。 help列出所有可用的命令。 install-plugin从文件URL或从更新中心安装插件。 install-tool执行自动工具安装并将其位置打印到stdout。 只能从 内部版本。 keep-build标记该构建以永久保留该构建。 list-changes转储指定构建的变更日志。 login保存当前凭证以允许将来的命令在没有显式凭证信息的情况下运行。 注销删除使用登录命令存储的凭证。 邮件读取stdin并将其作为电子邮件发送出去。 offline-node离线节点停止使用临时执行构建的节点直到下一个“ online-node”命令。 online-node在线使用节点执行构建以取消先前的“ offline-node”命令。 安静静默Jenkins为重新启动做准备。 不要开始任何构建。 重新加载配置丢弃内存中所有已加载的数据然后从文件系统重新加载所有内容。 有用的时候 您直接在磁盘上修改了配置文件。 重新启动重新启动詹金斯 安全重启安全重启詹金斯 安全关闭将Jenkins置于安静模式等待现有构建完成然后关闭 詹金斯 set-build-description设置构建的描述。 set-build-display-name设置构建的displayName set-build-result设置当前构建的结果。 仅当从内部调用时才有效。 shutdown立即关闭Jenkins服务器 update-job从stdin更新作业定义XML。 与get-job命令相反 version输出当前版本。 wait-node-offline等待节点脱机 wait-node-online等待节点联机 我是谁报告您的凭据和权限 目前尚不清楚每个参数都需要什么参数但是在不带参数调用时它们几乎都遵循CLI的用法用法打印模式。 例如当您不带任何参数调用build命令时以下是您在错误流中返回的内容 参数“ JOB”为必填项 java -jar jenkins-cli.jar建立args… 开始构建然后选择等待完成。 除了一般的脚本使用之外该命令还可以 用于从一个作业的构建中调用另一个作业。 使用-s选项此命令将根据以下命令更改退出代码 构建的结果退出代码0表示成功。 使用-c选项只有在存在 SCM变更 职位要建立的工作名称 -c在开始构建之前检查SCM更改如果没有请检查 更改不进行构建即退出 -p以键值格式指定构建参数。 -s等待命令完成/中止 从系统中取出数据 与远程系统的所有交互都由流处理编写脚本非常容易这些脚本将使用内置的Groovy工具以易于解析的String格式返回数据。 从理论上讲您还应该能够封送更复杂的对象但是现在让我们保持简单。 这是一个Groovy脚本该脚本仅将所有作业名称提取到List中调用Groovy inspect方法引用所有值。 GrabResolver(name glassfish, root http://maven.glassfish.org/content/groups/public/)
GrabResolver(name github, root http://kellyrob99.github.com/Jenkins-api-tour/repository)
Grab(org.kar:hudson-api:0.2-SNAPSHOT)
GrabExclude(org.codehaus.groovy:groovy)
import org.kar.hudson.api.cli.HudsonCliApiString rootUrl http://localhost:8080
HudsonCliApi cliApi new HudsonCliApi()
OutputStream out new ByteArrayOutputStream()
cliApi.runCliCommand(rootUrl, [groovysh, hudson.jobNames.inspect()], System.in, out, System.err)
List allJobs Eval.me(cliApi.parseResponse(out.toString()))
println allJobs 收到响应后我们将做一些整理工作以删除String开头的一些多余字符并使用Eval.me将String转换为List。 Groovy提供了多种将文本转换为代码的方法因此如果您的使用情况比这种简单情况复杂则可以使用带有Binding或其他替代方法的GroovyShell将结果解析为有用的东西。 这种简单的技术也扩展到了Maps和其他类型从而使得处理从服务器发送回的数据变得简单。 一些有用的例子 查找具有更新的插件并更新所有插件 这是一个使用Groovy脚本查找所有具有可用更新的插件然后将结果返回给调用者然后在所有插件上调用CLIinstall-plugin命令的示例。 方便地此命令将安装插件如果尚未安装或将其更新到最新版本如果已安装。 def findPluginsWithUpdates
Hudson.instance.pluginManager.plugins.inject([]) { List toUpdate, plugin -if(plugin.hasUpdate()){toUpdate plugin.shortName}toUpdate
}.inspect()OutputStream updateablePlugins new ByteArrayOutputStream()
cliApi.runCliCommand(rootUrl, [groovysh, findPluginsWithUpdates], System.in, updateablePlugins, System.err)def listOfPlugins Eval.me(parseOutput(updateablePlugins.toString()))
listOfPlugins.each{ plugin -cliApi.runCliCommand(rootUrl, [install-plugin, plugin])
} 一次安装或升级一套插件 使用“管理插件” UI绝对可以胜任并且是幂等的因此多次运行它只会导致可能升级已安装的插件。 这套插件可能有些过分但是我最近调查了一些插件以供使用。 GrabResolver(nameglassfish, roothttp://maven.glassfish.org/content/groups/public/)
GrabResolver(namegithub, roothttp://kellyrob99.github.com/Jenkins-api-tour/repository)
Grab(org.kar:hudson-api:0.2-SNAPSHOT)
GrabExclude(org.codehaus.groovy:groovy)
import static java.net.HttpURLConnection.*
import org.kar.hudson.api.*
import org.kar.hudson.api.cli.HudsonCliApiString rootUrl http://localhost:8080
HudsonCliApi cliApi new HudsonCliApi()[groovy, gradle, chucknorris, greenballs, github, analysis-core, analysis-collector, cobertura,project-stats-plugin,audit-trail, view-job-filters, disk-usage, global-build-stats,radiatorviewplugin, violations, build-pipeline-plugin, monitoring, dashboard-view,iphoneview, jenkinswalldisplay].each{ plugin -cliApi.runCliCommand(rootUrl, [install-plugin, plugin])
}// Restart a node, required for newly installed plugins to be made available.
cliApi.runCliCommand(rootUrl, safe-restart) 查找所有失败的构建并触发它们 网络问题或基础设施事件可能导致大量构建一次全部失败这并非罕见。 解决问题后此脚本可用于验证构建是否均正常工作。 GrabResolver(name glassfish, root http://maven.glassfish.org/content/groups/public/)
GrabResolver(name github, root http://kellyrob99.github.com/Jenkins-api-tour/repository)
Grab(org.kar:hudson-api:0.2-SNAPSHOT)
GrabExclude(org.codehaus.groovy:groovy)
import org.kar.hudson.api.cli.HudsonCliApiString rootUrl http://localhost:8080
HudsonCliApi cliApi new HudsonCliApi()
OutputStream out new ByteArrayOutputStream()
def script hudson.items.findAll{ job -job.isBuildable() job.lastBuild job.lastBuild.result Result.FAILURE
}.collect{it.name}.inspect()cliApi.runCliCommand(rootUrl, [groovysh, script], System.in, out, System.err)
List failedJobs Eval.me(cliApi.parseResponse(out.toString()))
failedJobs.each{ job -cliApi.runCliCommand(rootUrl, [build, job])
} 打开一个交互式Groovy Shell 如果您确实想在服务器上戳戳则可以启动一个交互式外壳程序以检查状态并执行命令。 绑定了System.in流并立即回显了来自服务器的响应。 GrabResolver(name glassfish, root http://maven.glassfish.org/content/groups/public/)
GrabResolver(name github, root http://kellyrob99.github.com/Jenkins-api-tour/repository)
Grab(org.kar:hudson-api:0.2-SNAPSHOT)
GrabExclude(org.codehaus.groovy:groovy)
import org.kar.hudson.api.cli.HudsonCliApi
/*** Open an interactive Groovy shell that imports the hudson.model.* classes and exposes* a hudson and/or jenkins object in the Binding which is an instance of hudson.model.Hudson*/
HudsonCliApi cliApi new HudsonCliApi()
String rootUrl args ? args[0] :http://localhost:8080
cliApi.runCliCommand(rootUrl, groovysh) 项目更新 去年发生了很多事情所有项目依赖项都需要更新。 特别是对GroovyGradle和Spock进行了一些非常不错的改进。 最值得注意的是从0.9.2版开始Gradle已经走了很长一段路。 Groovy 1.8中添加的JSON支持也很方便。 Spock在使用Unroll时需要进行一些小的调整才能在测试报告中呈现动态内容但这对于“老”方法和“ 链式存根 ”之类的功能来说是一笔不小的代价。 本质上为了响应Groovy 1.8中的更改Spock Unroll注释需要从以下更改 Unroll(querying of #rootUrl should match #xmlResponse) 闭包封装的GString表达式 Unroll({querying of $rootUrl should match $xmlResponse}) 听起来语法似乎还在不断变化我很高兴在网上找到了关于该问题的讨论 。 在Github上托管Maven存储库 也许您从前面的脚本示例中注意到了我们正在引用一个已发布的库来获取HudsonCliApi类。 上周 我读了一篇有趣的文章 描述了如何使用内置的Github Pages发布Maven存储库。 尽管它的功能不如Nexus或Artifactory这样的存储库但足以以标准方式将一些二进制文件提供给大多数常见的构建工具。 只需在标准Maven回购布局中发布二进制文件以及关联的Pom即可开始比赛 每个依赖项管理系统都有其怪癖我在看着您Ivy但是它们很容易解决因此这里是GradleMaven和Groovy Grapes使用此项目代码生成的库的示例。 请注意Jenkins / Hudson所需的某些依赖项在Maven中央存储库中不可用因此我们从Glassfish存储库中获取它们。 Gradle 非常简单这适用于最新版本的Gradle并假定您使用的是Groovy插件。 repositories {mavenCentral()maven {url http://maven.glassfish.org/content/groups/public/}maven {url http://kellyrob99.github.com/Jenkins-api-tour/repository}
}
dependencies {groovy org.codehaus.groovy:groovy-all:${versions.groovy}compile org.kar:hudson-api:0.2-SNAPSHOT
} Maven xml中的内容基本相同在这种情况下假设您使用的是GMaven插件 repositoriesrepositoryidglassfish/idnameglassfish/nameurlhttp://maven.glassfish.org/content/groups/public//url/repositoryrepositoryidgithub/idnameJenkins-api-tour maven repo on github/nameurlhttp://kellyrob99.github.com/Jenkins-api-tour/repository/url/repository
/repositoriesdependenciesdependencygroupIdorg.codehaus.groovy/groupIdartifactIdgroovy-all/artifactIdversion${groovy.version}/version/dependencydependencygroupIdorg.kar/groupIdartifactIdhudson-api/artifactIdversion0.2-SNAPSHOT/version/dependency
/dependencies 葡萄 在这种情况下解决旧版本Groovy的某些传递依赖关系似乎存在问题这就是为什么对此有明确排除的原因。 GrabResolver(nameglassfish, roothttp://maven.glassfish.org/content/groups/public/)
GrabResolver(namegithub, roothttp://kellyrob99.github.com/Jenkins-api-tour/repository)
Grab(org.kar:hudson-api:0.2-SNAPSHOT)
GrabExclude(org.codehaus.groovy:groovy) 链接 Github Jenkins-api-tour项目页面 Github上的Maven存储库 脚本程序示例Groovy脚本 Jenkins CLI文档 相关文章 接触JenkinsHudsonAPI 使用Groovy脚本可以做的五件事 展示StackExchange API的Grails应用 参考 《 The Kaptain on…东西》博客中的JCG合作伙伴 Kelly Robinson 的JenkinsHudsonAPI的第2部分 。 翻译自: https://www.javacodegeeks.com/2012/08/hooking-into-jenkins-hudson-api-part-2.htmljenkins api