Запустить задание Jenkins на том же узле, что и родительский с Groovy - PullRequest
0 голосов
/ 18 декабря 2018

В задании Jenkins я хочу запустить другое задание Jenkins из скрипта Groovy:

other_job.scheduleBuild();

Но other_job не запускается на том же узле, что и родительское задание.Как я могу изменить свой сценарий для запуска other_job на том же узле, что и родительское задание?

Я делал это с плагинами "Trigger / call builds on other project" и "NodeLabel Parameter", но мне хотелось быТеперь, чтобы сделать это внутри скрипта.

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Исходя из ответа 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.")
}
0 голосов
/ 25 декабря 2018

Во-первых, отметьте опцию Restrict where this project can be run в конфигурации 'other_job' - вы должны указать там то же имя узла.Тогда это должно работать:

import hudson.model.*
def job = Hudson.instance.getJob('other_job')
job.scheduleBuild();

Если вы не хотите использовать эту опцию в вашем «other_job», то вы можете использовать NodeLabel Parameter Plugin (который вы уже использовали)и передать параметр NodeLabel в последующее задание.В этом случае см. Пример со страницы Groovy plugin , как запустить другое задание с параметрами (вам нужно использовать NodeParameterValue вместо StringParameterValue):

def job = Hudson.instance.getJob('MyJobName')
def anotherBuild
try {
    def params = [
      new StringParameterValue('FOO', foo),
    ]
    def future = job.scheduleBuild2(0, new Cause.UpstreamCause(build), new ParametersAction(params))
    println "Waiting for the completion of " + HyperlinkNote.encodeTo('/' + job.url, job.fullDisplayName)
    anotherBuild = future.get()
} catch (CancellationException x) {
    throw new AbortException("${job.fullDisplayName} aborted.")
}
println HyperlinkNote.encodeTo('/' + anotherBuild.url, anotherBuild.fullDisplayName) + " completed. Result was " + anotherBuild.result

Если это не такработает, возможно, проблема связана с ограничениями узла (например, существует только один исполнитель для узла).

ПРИМЕЧАНИЕ. Я предпочитаю использовать конвейеры Jenkins для конфигураций заданий.Это позволяет хранить ваши конфигурации сборки в Jenkinsfiles , которые можно загрузить из репозитория (например, из GitLab).См. пример запуска задания с NodeParameterValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...