Подтвердить что ты не робот

Получение статуса сборки в post-build script

Я хотел бы иметь крюк после сборки или аналогичный, чтобы я мог иметь тот же результат, что и e. г. плагин IRC, но дайте это script. Я смог получить всю информацию, кроме фактического статуса сборки. Это просто не работает, как "Post-build script", "Задача после сборки", "Параметрированный триггер" aso.

Возможно с некоторыми очень уродливыми обходными решениями, но я хотел спросить, на случай, если у кого-то будет более приятный вариант... не написав мой собственный плагин.

4b9b3361

Ответ 1

Используйте Groovy script в шаге после сборки через Groovy Плагин Post-Build. Затем вы можете обратиться к внутренним частям Jenkins через Jenkins Java API. Плагин предоставляет script менеджер переменных, который можно использовать для доступа к важным частям API (см. Раздел "Использование" в документации плагина).

Например, здесь вы можете выполнить простой внешний Python script в Windows и вывести его результат (а также результат сборки) для сборки консоли:

def command =  """cmd /c python -c "for i in range(1,5): print i" """
manager.listener.logger.println command.execute().text

def result = manager.build.result
manager.listener.logger.println "And the result is: ${result}"

Ответ 2

Он работает, как указано в плагине Groovy Post-Build, но без какого-либо дополнительного цитирования в строке, которая выполняется. Таким образом, я должен был поместить фактическую функциональность в оболочку script, которая выполняет вызов curl, что, в свою очередь, требует кавычки для параметров POST aso.

def result = manager.build.result
def build_number = manager.build.number
def env = manager.build.getEnvironment(manager.listener)
def build_url = env['BUILD_URL']
def build_branch = env['SVN_BRANCH']
def short_branch = ( build_branch =~ /branches\//).replaceFirst("")
def host = env['NODE_NAME']
def svn_rev = env['SVN_REVISION']
def job_name = manager.build.project.getName()


"/usr/local/bin/skypeStagingNotify.sh Deployed ${short_branch} on ${host} - ${result} - ${build_url}".execute()

Ответ 3

Действительно простое решение, возможно, не элегантное, но оно работает!

1: Поймайте весь результат сборки, который хотите поймать (в данном случае УСПЕХ).

2: Ввести переменную env, имеющую статус задания

Шаг 1

3: Сделайте то же самое для любого другого статуса (в этом случае я поймаю от прерванного до неустойчивого)

введите описание изображения здесь

4: После того, как вы сможете использовать значение для всего, что хотите, в этом случае я передаю его ANT script! (Или вы можете напрямую загрузить его из ANT в качестве переменной среды...)

введите описание изображения здесь

Надеюсь, это поможет!

Ответ 4

Для этого мне очень нравится плагин Условный строительный шаг. Он очень гибкий, и вы можете выбрать, какие действия предпринять на основе сбоя или успеха сборки. Например, здесь случай, когда я использую условный шаг сборки для отправки уведомления о сбое сборки:

введите описание изображения здесь

Вы также можете использовать шаг условной сборки для установки переменной среды или записи в файл журнала, который вы используете в последующих шагах "выполнить оболочку". Например, вы можете создать сборку с тремя шагами: один шаг для компиляции тестов кода/запуска, другой - для установки переменной среды STATUS="failed", а затем третьего шага, который отправляет электронное письмо, например The build finished with a status: ${STATUS}

Ответ 5

Попробуйте Плагин Post Build Task...

Он позволяет указать условия на основе выходных данных журнала...

Ответ 6

Основное решение (пожалуйста, не смейтесь)

#!/bin/bash
STATUS='Not set'
if [ ! -z $UPSTREAM_BUILD_DIR ];then
  ISFAIL=$(ls -l /var/lib/jenkins/jobs/$UPSTREAM_BUILD_DIR/builds | grep "lastFailedBuild\|lastUnsuccessfulBuild" | grep $UPSTREAM_BUILD_NR)
  ISSUCCESS=$(ls -l /var/lib/jenkins/jobs/$UPSTREAM_BUILD_DIR/builds | grep "lastSuccessfulBuild\|lastStableBuild" | grep $UPSTREAM_BUILD_NR)
  if [ ! -z "$ISFAIL" ];then
     echo $ISFAIL
     STATUS='FAIL'
  elif [ ! -z "$ISSUCCESS" ]
  then
     STATUS='SUCCESS'
  fi
fi
echo $STATUS

где

$ UPSTREAM_BUILD_DIR = $ JOB_NAME

$ UPSTREAM_BUILD_NR = $ BUILD_NUMBER

передано от сборки вверх по течению

Конечно, "/var/lib/jenkins/jobs/" зависит от вашей установки jenkins

Ответ 7

Groovy скрипт решения: -

Здесь я использую плагин скриптов groovy, чтобы получить статус сборки и установить его в качестве переменной среды, чтобы переменная окружения могла использоваться в скриптах после сборки с использованием плагина задач после сборки.

Groovy скрипт: -

import hudson.EnvVars
import hudson.model.Environment

def build = Thread.currentThread().executable
def result = manager.build.result.toString()  
def vars = [BUILD_STATUS: result]

build.environments.add(0, Environment.create(new EnvVars(vars)))

Постскриптум: -

echo BUILD_STATUS="${BUILD_STATUS}"