Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Groovy在与父节点相同的节点上触发Jenkins作业_Jenkins_Groovy - Fatal编程技术网

使用Groovy在与父节点相同的节点上触发Jenkins作业

使用Groovy在与父节点相同的节点上触发Jenkins作业,jenkins,groovy,Jenkins,Groovy,在Jenkins作业中,我想从Groovy脚本触发另一个Jenkins作业: other_job.scheduleBuild(); 但其他_作业不是在父作业所在的节点上启动的。如何修改脚本以在同一节点上启动父作业以外的其他_作业 我以前使用“触发器/调用构建在其他项目上”和“NodeLabel参数”插件来实现这一点,但现在我希望在脚本中实现这一点 首先,选中“其他作业”配置中的限制此项目可以运行的位置选项-您必须在此处指定相同的节点名称。 那么,这应该是可行的: import hudson.m

在Jenkins作业中,我想从Groovy脚本触发另一个Jenkins作业:

other_job.scheduleBuild();
但其他_作业不是在父作业所在的节点上启动的。如何修改脚本以在同一节点上启动父作业以外的其他_作业

我以前使用“触发器/调用构建在其他项目上”和“NodeLabel参数”插件来实现这一点,但现在我希望在脚本中实现这一点


首先,选中“其他作业”配置中的
限制此项目可以运行的位置
选项-您必须在此处指定相同的节点名称。 那么,这应该是可行的:

import hudson.model.*
def job = Hudson.instance.getJob('other_job')
job.scheduleBuild();
如果您不想在“其他_作业”中使用此选项,则可以使用(已使用)并将NodeLabel参数传递给下游作业。 在这种情况下,请参见“如何使用参数启动另一个作业”页中的示例(您需要使用
NodeParameterValue
而不是
StringParameterValue
):

如果它不工作,则问题可能是节点限制(例如,节点只有一个执行器)


注意:我更喜欢用于作业配置。它允许您存储可从存储库(例如,从GitLab)加载的构建配置。请参见使用
节点参数值触发作业的步骤

基于biruk1230的答案,以下是完整的解决方案:

import hudson.model.*;
import jenkins.model.Jenkins
import java.util.concurrent.*
import hudson.AbortException
import org.jvnet.jenkins.plugins.nodelabelparameter.*

def currentBuild = Thread.currentThread().executable
current_node = currentBuild.getBuiltOn().getNodeName()

def j = Hudson.instance.getJob('MyJobName')
try {
  def params = [
    new NodeParameterValue('node', current_node, current_node),
  ]
  def future = j.scheduleBuild2(0, new Cause.UpstreamCause(build), new ParametersAction(params))
  println "Waiting for the completion of " + j.getName()
  anotherBuild = future.get()
} catch (CancellationException x) {
  throw new AbortException("aborted.")
}

你是使用Jenkins管道,还是在自由式作业中使用Groovy脚本?@biruk1230我在自由式作业中使用Groovy脚本所以,当你试图运行代码时,它不起作用,是吗?可能是节点本身的问题(该节点上只能有一个执行器-在这种情况下,作业无法并行运行)。此外,如前所述,请在“其他作业”配置中选中
限制此项目可以运行的位置
选项-您必须在那里指定相同的节点名称。@biruk1230不抱歉,我现在无法测试您的答案,几天后我会告诉你它是否有效。
import hudson.model.*;
import jenkins.model.Jenkins
import java.util.concurrent.*
import hudson.AbortException
import org.jvnet.jenkins.plugins.nodelabelparameter.*

def currentBuild = Thread.currentThread().executable
current_node = currentBuild.getBuiltOn().getNodeName()

def j = Hudson.instance.getJob('MyJobName')
try {
  def params = [
    new NodeParameterValue('node', current_node, current_node),
  ]
  def future = j.scheduleBuild2(0, new Cause.UpstreamCause(build), new ParametersAction(params))
  println "Waiting for the completion of " + j.getName()
  anotherBuild = future.get()
} catch (CancellationException x) {
  throw new AbortException("aborted.")
}