在Jenkins(哈德逊),有没有办法禁止一项工作从另一项工作中进行?
基本上,我们有一个执行标准构建/测试的构建环境。我们还使用相同的Jenkins示例来执行其他一些工作,比如自动安装我们产品的新版本(这是某些自动化测试所必需的)。当我们运行一些“额外”作业时,我们希望暂时禁用“标准”作业(然后稍后自动启用它们)。
理想情况下,作业上应该有一些额外的构建步骤来说明“禁用XYZ作业”。或者,如果有一种方法可以通过蚂蚁或其他方式告诉Jenkins禁用一项工作,那也是可行的。
**更新:**看起来有几个插件可以阻止两个作业同时运行,但我真的需要:
1.运行禁用作业1的作业A
1.根据作业A的输出,在Jenkins之外做一些事情
1.运行再次启用作业1的作业B
7条答案
按热度按时间zlhcx6iw1#
您可以将Groovy脚本作为构建前步骤执行。在我的公司里,我已经这样做过几次了。您必须安装Groovy plugin。然后,您可以添加一个构建前步骤“执行系统groovy脚本”,在那里您可以执行类似的操作:
要在构建后启用作业,请添加构建后步骤并执行
如果您想要一个作业,这只会启用或禁用其他构建作业,那么您不需要选择构建前或构建后步骤,而是使用系统Groovy脚本的普通构建步骤。
您可以使用Groovy脚本进行更多思考。关于它的更多信息值得一读。
7dl7o3gd2#
我发现了一种使用jenkins-cli(命令行界面)的可能方法。我添加了这个构建步骤(对我来说,它是一个Windows批处理命令,尽管我可能会将其变成脚本或更优雅的东西):
我还没有研究如何找到Jenkins,但这应该不会太难。
这是一些information on the CLI。您还可以访问http://your-jenkins:8080/cli获取一些可用的命令。
azpvetkf3#
我们已经使用Port Allocator Plugin完成了这项工作。它允许您的作业在其运行期间“抢占”一个TCP端口,这意味着在此期间没有其他作业可以抢占该端口,从而有效地阻止试图获取相同端口的两个作业的并行执行。
还有Locks and Latches Plugin,听起来很完美,但我们发现它很难使用,而且似乎不再维护了。
问题澄清后更新:
您可以使用Jenkins的HTTP API远程启用/禁用作业。如果您浏览到任何作业,然后将
api
放在URL的末尾,您将看到有关执行此操作所需的HTTP请求的说明。例如:http://ci.jruby.org/job/activerecord-jdbc-master/api(查看该页面的末尾-基本上是发布到<job_url>/disable
)。在作业中使用构建步骤调用cURL或类似的适当请求数据应该是一件很简单的事情。
8aqjt8rx4#
我遇到了同样的问题,并使用dunni's Answer解决了它,我需要指出的是,只有当我选择“执行系统Groovy脚本”作为构建步骤时,它才能起作用,如果我选择“执行Groovy脚本”,它会给出Arun Sangal报告的错误:“Catch:groovy.lang.MissingPropertyException:No That Property:Jenkins for class:hudson8158411085491171644”。
我的Groovy代码如下所示:
wmvff8tz5#
可以使用JOB DSL插件来完成此操作,而无需指定凭据。
要使用的DSL脚本为:
1.这是针对自由式工作的。例如,如果需要禁用管道作业,请使用
pipelineJob
而不是job
。1.通常情况下,
"jobname"
需要包含文件夹,使用Jenkins根作为引用。1.要重新启用作业,请使用
disabled(false)
。vc9ivgsu6#
Jenkins的最新版本(2及以上)更改了方法名称。
只需将
disable()
替换为setDisabled(boolean)
我发现这对我很管用:
Jenkins.instance.getItem("jobname").setDisabled(false)
mw3dktmi7#
您可以尝试构建拦截器插件https://wiki.jenkins-ci.org/display/JENKINS/Build+Blocker+Plugin