Конвейер Jenkins помечает этап как нестабильный, если некоторые этапы не выполняются - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я сталкиваюсь с проблемой, что я хочу установить стадию в этом случае stage2 на "UNSATABLE", если некоторые шаги не выполняются, и на "FAILED", если более чем, например, 60% шагов терпят неудачу.

Мой Jenkinsfile выглядит сейчас так:

pipeline {
    agent any
    stages {
        stage("stage1") {
            steps {
                echo "prepare some stuff"
            }
        }
        stage("stage2") {
            steps {
                parallel(
                        "step1": {
                            sh 'false'
                        },
                        "step2": {
                            sh 'true'
                        },
                        "step3": {
                            sh 'false'
                        }
                )
            }
        }
        stage('stage3') {
            steps {
                echo "do some other stuff"
            }
        }
    }
}

1 Ответ

0 голосов
/ 11 октября 2018

Попробуйте перехватить

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

Согласно этому ответу: https://stackoverflow.com/a/43303039/3957754, в декларативном конвейере нельзя просто использовать try напрямую.Вы должны обернуть произвольный код groovy в шаге сценария

stage('Maven Install') {
   steps {
       script {

           echo "Step 1"

           try {
               sh "mvn clean install"
           } catch (Exception err) {
               //increment error count
           } finally {
               //do something
           }
       }

       script {

           echo "Step 2"

           try {
               sh "mvn clean install"
           } catch (Exception err) {
               //increment error count
           } finally {
               //do something
           }
       }       
   }
}

Пометить этап как UNSTABLE / FAILURE

Согласно официальной документации https://jenkins.io/doc/pipeline/tour/post/ вы можете использовать всегда блок:

always {
    echo 'One way or another, I have finished'
    //put here your final logic
}

Этот блок будет выполнен, когда все предыдущие этапы пройдены, поэтому здесь вы можете применить некоторую логику, используя счетчик ошибок и установить состояние для всей сборки:

  • currentBuild.result = 'УСПЕХ'
  • currentBuild.result = 'FAILURE'
  • и т. Д.
...