Получение статуса сборки в post-build script
Я хотел бы иметь крюк после сборки или аналогичный, чтобы я мог иметь тот же результат, что и e. г. плагин IRC, но дайте это script.
Я смог получить всю информацию, кроме фактического статуса сборки. Это просто не работает, как "Post-build script", "Задача после сборки", "Параметрированный триггер" aso.
Возможно с некоторыми очень уродливыми обходными решениями, но я хотел спросить, на случай, если у кого-то будет более приятный вариант... не написав мой собственный плагин.
Ответы
Ответ 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}"