2016-08-13 2 views
0

Я запускаю сборку под названием testAUT с параметром FRACTURE_NO = 15. Я запускаю ту же сборку с тем же параметром.Как закончить сборку jenkins с определенным параметром

Я хочу, когда это произойдет, когда более ранняя сборка будет убита. Как я могу это сделать с помощью Дженкинса? Я хочу, чтобы иметь возможность завершить сборку с тем же параметром, что и текущая сборка.

+0

Почему бы не ограничить сборку, чтобы работать только по одному? –

+0

@Shachar. Цель состоит в том, чтобы прервать уже запущенный (или поставленный в очередь) экземпляр задания. Я не понимаю, как ограничить работу работой только по одному из них. –

ответ

1

Если у вас все в порядке, используйте Groovy Plugin и Jenkins Rest Api, вот шаги, необходимые для выполнения необходимых действий.

  1. Установите модуль Groovy.
  2. Перейдите на страницу конфигурации задания.
  3. Добавьте «fracture_no» построить параметр со значением 125.
  4. по умолчанию Enable «Execute процессов сборки при необходимости» в разделе Общие
  5. Добавить «Выполнить Groovy скрипт» построить шаг как первый шаг в работе
  6. Добавьте следующий код на заводной этапе

def parameterName = "fracture_no"; 
def jenkinsUrl = System.getenv('JENKINS_URL'); 
def buildNumber = System.getenv('BUILD_NUMBER').toInteger(); 
def jobUrl = jenkinsUrl + "job/" + System.getenv('JOB_NAME'); 
def buildNumberUrl = jobUrl + "/" + buildNumber; 
def myParameter = System.getenv(parameterName); 

def projectXml = new XmlSlurper().parseText(new URL(jobUrl + "/api/xml").getText()); 
projectXml.build.each { 
    def previousBuildNumber = it.number.text().toInteger(); 
    if(previousBuildNumber < buildNumber) 
    { 
    def previousBuildNumberUrl = jobUrl + "/" + previousBuildNumber; 
    def jobXml = new XmlSlurper().parseText(new URL(previousBuildNumberUrl + "/api/xml").getText()); 
    if(jobXml.building.text() == "true") 
    { 
     jobXml.action.parameter.each { 
     if(it.name.text() == parameterName) { 
      if(it.value.text() == myParameter) { 
      def url = new URL(previousBuildNumberUrl + "/stop"); 
      def connection = url.openConnection(); 
      connection.setRequestMethod("POST"); 
      connection.connect(); 
      connection.content.text; 
      println "Stopping " + previousBuildNumber; 
      } 
     } 
     } 
    } 
    } 
} 

  1. Добавить еще один шаг сборки, который занимает много времени. Если вы просто хотите протестировать, добавьте следующий шаг командной строки Windows, который будет спать в течение 100 секунд.
    ping 127.0.0.1 -n 100 > nul
  2. Удалите задание дважды, используя значение параметра по умолчанию 125 (или столько раз, сколько вы хотите).
  3. Все, кроме последней сборки, следует остановить.
+0

как бы вы изменили код выше, чтобы проверить параметр сборки, чтобы убедиться, что он не совпадает с текущим заданием? Так что если у задания 1 есть сборка 1 с параметром построения fracture_no = 125, следующая сборка с параметром build fracture_no = 125 должна отменить первую сборку – Jasmine

+0

Это работает, но я получаю ошибку Caught: java.io.IOException: сервер ответил HTTP-ответ код: 403 для URL: http://sparkbuilder.corp.adobe.com:8080/job/FractureAUT/197/stop – Jasmine

+0

Обычно 403 означает, что запрос был отклонен из-за разрешений/безопасности. Если вы удаляете все разрешения от Jenkins, это должно работать. В противном случае вам необходимо будет передать учетные данные и/или токен, необходимые для выполнения действий администратора (остановки) во время запроса POST. –

Смежные вопросы