Jenkinsfile проваливают шаг и продолжают отдых - PullRequest
0 голосов
/ 08 марта 2019

У меня есть такой Jenkinsfile:

pipeline {
    agent any

    options {
        buildDiscarder(logRotator(numToKeepStr: '7'))
        disableConcurrentBuilds()
        timeout(time: 10, unit: 'MINUTES')
        timestamps()
    }

    stages {
        stage('Admin') {
            steps {
                script {
                    try {
                        result = "FAIL"
                    } catch(error) {
                        result = "FAIL"
                    }
                }
            }
        }
        stage('Normal') {
            steps {
                script {
                    try {
                sh("echo 'hi'")
                    } catch(error) {

                    }
                }
            }
        }
    }
}

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

Я посмотрел на все ответы SO для этого и не могу заставить его работать.

Настройка result = "FAIL" не приводит к сбою шага. Как я могу это сделать, но перейти к следующему шагу (шагам)?

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Вы можете пометить статус сборки как неудачный, установив новое значение для глобальной переменной jenkins currentBuild.Переменная имеет 3 состояния: SUCCESS (зеленый), FAILURE (красный) и UNSTABLE (желтый).catch должен препятствовать завершению сборки, поэтому вы можете установить статус currentBuild и просто продолжить.

           try {
               //so something
            } catch(error) {
                //mark build as failed
                currentBuild.result = 'FAILURE'
            }
        }

Я думаю, что это должно работать.К сожалению, у меня нет способа проверить этот банкомат.Если это не работает, пожалуйста, скажите мне.

0 голосов
/ 12 марта 2019

Хотите ли вы показать один этап «красный», а все остальные (без сбоев) «зеленый»?Насколько я знаю, это невозможно.

Хотите знать, какая стадия не проходит, а какая работает правильно?Ну, это зависит от того, как вы хотите, чтобы оно отображалось

Простой способ: как предложено в предыдущем ответе, вы можете использовать "echo", чтобы напечатать его в консоли

"Я хочу"это полная мощность ': капсулируйте try-catch внутри другого try-catch и используйте сигнал «error»:

stages {
    try {
        stage ('Normal') {
            try {
            /* Do your thing */
            } catch (err) {
                /* Mark this stage as "failure" using error
                error 'Stage Normal failing'
            }
        }  // stage 'Normal'
    } catch (err) {
        // here is the 'error' signal captured and omitted by now
    }

Стадия сбоя появляется с текстом «fail», показанным в поле и в более темном месте.красный

0 голосов
/ 10 марта 2019

Насколько мне известно, мы можем реализовать то же, что и ниже.

  1. Использование шага скрипта и блока try-catch

    stage('someStage') {
    steps {
        script {
            try {
                //Do something
            } catch (err) {
                echo err
            }
        }
        echo currentBuild.result = 'FAILURE'
      }
    }
    
  2. Вы можете использовать распространение: ложь, которая доступна на этапе сборки. Что-то вроде ниже

    stage("example") {
        b = build(job: "example-job", propagate: false).result
        if(b == 'FAILURE') {
            echo "First job failed"
            currentBuild.result = 'FAILURE' // of FAILURE
        }
    }
    stage("test") {
        build("test-job")
    }
    

Ссылки:
https://jenkins.io/doc/pipeline/steps/pipeline-build-step/

https://medium.com/@Lenkovits/jenkins-pipelines-and-their-dirty-secrets-1-9e535cd603f4

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