Почему это условие в трубопроводе Дженкинса не работает? - PullRequest
0 голосов
/ 10 мая 2019

Я злюсь на следующий конвейерный код, так как он не делает то, что я ожидаю.У кого-нибудь есть идеи, что я делаю не так?

Вот мой конвейерный код для определения параметра


pipeline {
    agent any
    parameters { booleanParam(name: 'bForceCheckout', defaultValue: false, description: '') }

    ...

А вот сам этап


stage('SVN Checkout') {
   // Get code from SVN repository
   steps {
      script {

         // If project is not yet checked out, setup checkout structure, i.e. which
         // folders will be checked out and which will not be checked out
         retry (5) {
            try {
               def svnInfoError = bat (returnStatus: true, script: "svn info ${projectName}")
               // bForceCheckout has to be set as parameter in the job

               println "---> " + ((svnInfoError != 0) || bForceCheckout)

               if ((svnInfoError != 0) || bForceCheckout) {


                  println "svnInfoError:  " + svnInfoError
                  println "bForceCheckout: " + bForceCheckout

                  timeout(activity: true, time: 90, unit: 'MINUTES') {

                     // Clean up
                     deleteDir ()

                     ... some SVN related stuff ...
                  }
               }
            } catch (Exception ex) {
               // Clean up
               deleteDir ()

               println(ex.toString());

               error ("SVN checkout: directory structure could not be set up")
            }
         }
      }
   }
}

ИЗдесь вывод консоли.Как видите, svnInfoError и bForceCheckout равны 0 / false, но часть в условии if все еще выполняется ...

12:51:22  
[Pipeline] echo
12:51:22  --->false
[Pipeline] echo
12:51:23  svnInfoError:  0
[Pipeline] echo
12:51:23  bForceCheckout: false
[Pipeline] timeout
12:51:23  Timeout set to expire after 1 hr 30 min without activity
[Pipeline] {
[Pipeline] deleteDir

[Pipeline] bat
12:55:21  

1 Ответ

0 голосов
/ 16 мая 2019

Спасибо, ребята, это оказалось проблемой типа данных. Я также сейчас нашел следующий вопрос, приводящий к тому же ответу: booleanParam in jenkins dsl

Определение параметра следующим образом даст переменную типа string.

parameters { booleanParam(name: 'bForceCheckout', defaultValue: false, description: '') }

Проверка типа данных:

println bForceCheckout.getClass()

... даст вам

09:06:03  class java.lang.String

На мой взгляд, это ошибка, поэтому я создал проблему Дженкинса: https://issues.jenkins -ci.org / browse / JENKINS-57499

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

if ((svnInfoError != 0) || bForceCheckout.toBoolean()) {

РЕДАКТИРОВАТЬ: Я обнаружил, что на самом деле вы должны использовать следующий синтаксис для доступа к параметрам, и это работает как ожидалось:

if ((svnInfoError != 0) || params.bForceCheckout) {
...