Могу ли я запускать этапы высокого уровня jenkins параллельно?

#jenkins #jenkins-pipeline #jenkins-groovy

#дженкинс #дженкинс-конвейер #дженкинс-groovy

Вопрос:

У меня есть сценарий groovy для некоторых тестов параллельно, но я не могу перезапустить этапы Installation1 / Installation2 вручную из пользовательского интерфейса jenkins. Есть ли какой-либо другой способ сделать это, чтобы я мог перезапустить определенный этап?

 pipeline {
     agent {label ''}
     stages {
             stage('Check workspace') {
             steps {
             }
             }
             stage('Installation') {
             parallel{
                        stage('Installation 1')
                        {
                        agent {label ''}
                        steps {
                            }
                        }
                    }
                        stage('Installation 2')
                        {
                        agent {label ''}
                        steps {
                            }
                        }
                    }
             }
             }
             stage('Test') {
             parallel{
                        stage(' Tests 1'){
                        agent {label ''}
                        steps {
                            }
                        }
                        stage(' Tests 2'){
                        agent {label ''}
                        steps {
                            }
                        }
                        }
                    }
             stage('Report') {
             steps {
             }
             }  
        }
    }
  

Комментарии:

1. Рассмотрите возможность использования «параметров», смешанных с условными обозначениями («когда») на этапах

Ответ №1:

Вы можете определить этапы installation1 и installation2 как функции в вашем файле Jenkins и вызывать их при сбое теста. Эти функции можно использовать как на этапе установки, так и для повторной установки при сбое тестов.

 def installation1() {
   stage('Installation 1')
                        {
                        agent {label ''}
                        steps {
                            }
                        }
}

def installation2() {
   stage('Installation 2')
                        {
                        agent {label ''}
                        steps {
                            }
                        }
}
  

На параллельном шаге вы можете вызывать функции, как показано ниже. Используйте try-catch для вызова функций установки при сбое тестов.

  stage('Test') {
   try {
     "TEST YOUR INSTALLATION"
   } catch(error) {
     echo "First test failed, let's retry installation if accepted"
     retry(2) {
        input "Retry the installation ?"
        parallel{
           installation1(),
           installation2()
      }
     }
   }
}
  

Этот код не тестируется. Надеюсь, это поможет 🙂