Конвейер Дженкинса, когда условие печатает выражение, а не сравнивает - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно написать конвейер, который строит инфраструктуру Terraform в понедельник и разрушает в пятницу.Я пытаюсь определить, строить или уничтожать, в зависимости от результата $(date '+%a'), поэтому вот как выглядит условие на данный момент:

when {
      beforeAgent true
      expression { 
                 // Using 'Wed' because today is Wednesday
                  return  sh(returnStdout: true, script: '$(date +%a)') == 'Wed'
      }
}

Единственная проблема - каждый раз, когда я запускаю его,Оболочка Jenkins печатает результат sh(returnStdout: true, script: '$(date +%a)'), а не в качестве значения сравнения.

[Pipeline] sh
14:52:03 [teardown] Running shell script
14:52:04 + date +%a
14:52:04 + Wed
14:52:04 /jenkins-slave/workspace/teardown@tmp/durable-524bef20/script.sh: 2: /jenkins-slave/workspace/teardown@tmp/durable-524bef20/script.sh: Wed: not found

Что я здесь не так делаю?

PS Я очень новичок в Jenkins, как 2 дняЗаранее извиняюсь, если я тупой.

1 Ответ

0 голосов
/ 13 июня 2018

Как отметил @Matt Schuchard в комментарии, ваша первоначальная проблема - $(date +%a), которая заставляет его выполнить результат команды date +%a.

Но это полностью решает вашу проблему, так как sh(returnStdout: true, script: 'date +%a') будетне вернуть вам "Wed" для среды, но "Wed\n".

Попробуйте:

steps {
    script {
        String v = sh(returnStdout: true, script: 'date +%a')
        print v
        print v.trim()
    }
}

и результат будет выглядеть так:

enter image description here

Так что вы можете сделать как в моем примере и использовать trim():

when {
    beforeAgent true
    expression { sh(returnStdout: true, script: 'date +%a').trim() == 'Wed' }
}

Или, поскольку конвейеры Jenkins являются скриптами Groovy, вы можете сделать это в Groovy следующим образом:

def week = [1:'Sunday', 2:'Monday', 3:'Tuesday', 4:'Wednesday', 5:'Thursday', 6:'Friday', 7:'Saturday']

pipeline{
    agent any
    stages{
        stage('stage'){
            when {
                beforeAgent true
                expression { week[new Date()[Calendar.DAY_OF_WEEK]] == 'Wednesday' }
            }
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...