2016-08-02 3 views
9

В настоящее время мой трубопровод терпит неудачу (красный), когда работа maven неустойчива (желтая).Труба Дженкинса не работает, если шаг неустойчивый

node { 
    stage 'Unit/SQL-Tests' 
    parallel (
     phase1: { build 'Unit-Tests' }, // maven 
     phase2: { build 'SQL-Tests' } // shell 
    ) 
    stage 'Integration-Tests' 
    build 'Integration-Tests' // maven 
} 

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

Как я могу изменить задания/конвейер/дженкинс, чтобы (1) шаг трубопровода был нестабильным, а не неудачным, и (2) состояние трубопровода нестабильно вместо отказа.

Я попытался добавить параметр MAVEN_OPTS-Dmaven.test.failure.ignore=true, но это не решило проблему. Я не уверен, как обернуть build 'Unit-Test' в некоторую логику, которая может уловить и обработать результат.

Добавление подзаголовка с this logic не делает трюк, так как нет опции для проверки из подрывной деятельности (эта опция доступна в обычном задании maven). Я не хотел бы использовать проверку командной строки, если это возможно.

ответ

10

Какой бы ни был шаг UNSTABLE или FAILED, окончательный результат сборки в вашем скрипте будет FAILED.

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

def result = build job: 'test', propagate: false 

В конце потока, вы можете Вердикт окончательный результат основан на том, что вы получили от «результата» переменной.

Например

currentBuild.result='UNSTABLE' 

Вот пример подробно How to set current build result in Pipeline

Br,

Tim

13

уроки:

  • Дженкинс будет постоянно обновлять трубопровод в соответствии со значением currentBuild.result, который может быть либо SUCCESS, UNSTABLE или FAILED
  • Результат build job: <JOBNAME> может храниться в переменной. Состояние сборки находится в variable.result.
  • build job: <JOBNAME>, propagate: false предотвратит провал всей сборки сразу же.
  • currentBuild.resultcan only get worse. Если это значение было ранее FAILED и получает новый статус SUCCESS через currentBuild.result = 'SUCCESS' он будет оставаться FAILED

Это то, что я, наконец, используется:

node { 
    def result // define the variable once in the beginning 
    stage 'Unit/SQL-Tests' 
    parallel (
     phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE 
     phase2: { build 'SQL-Tests' } 
    ) 
    currentBuild.result = result.result // update the build status. jenkins will update the pipeline's current status accordingly 
    stage 'Install SQL' 
    build 'InstallSQL' 
    stage 'Deploy/Integration-Tests' 
    parallel (
     phase1: { build 'Deploy' }, 
     phase2: { result = build job: 'Integration-Tests', propagate: false } 
    ) 
    currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse) 
    stage 'Code Analysis' 
    build 'Analysis' 
} 
+2

И вы не можете установить 'SUCCESS' результат, если он уже был настроен на 'FAILED' (как обсуждалось [здесь] (http://stackoverflow.com/questions/38221836/how-to-manipulate-the-build-result-of-a-jenkins-pipeline-job). – StephenKing

+1

Спасибо за информацию. Добавил это в ответ. – michaelbahr

+0

У меня такая же проблема. Тем не менее я не понимаю причину.Почему Unstable считается FAILED, если плагин Stage View поддерживает нестабильный (желтый)? почему вам нужно постоянно устанавливать currentBuild.result и не просто взять худшее из всех? – lqbweb

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