Как использовать, если внутри sh / script в jenkinsfile? - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь написать оператор if внутри скрипта / sh, используя переменную JENKINS param. Вот снимок одного из этапов

stage('Verifying image') {
        agent {
            node { label 'master' }
        }
        steps {
            sh "docker images | grep ${params.wtss_version}"
            script {
                    sh '''
                            #!/bin/bash
                            if (( $(docker images | grep "$\{params.wtss_version}" | wc -l)>0));then
                            echo "Found file"
                            else
                            echo "Did not find file"
                            fi
                        '''
                }
            }
        }

Линия sh "docker images | grep ${params.wtss_version}", кажется, работает нормально. Но когда сборка достигает многострочного скрипта (внутри '' '.' ''), Он говорит:

[Pipeline] {
[Pipeline] sh
++ wc -l
++ grep '$/{params.wtss_version}'
++ docker images
+ ((  0>0 ))
+ echo 'Did not find file'
Did not find file

Я попробовал следующие варианты: -

if (( $(docker images | grep \"${params.wtss_version}\" | wc -l)>0));then но это говорит

[Pipeline] sh
++ wc -l
/var/lib/jenkins/workspace/get_wtss_img_dockerhub@tmp/durable-b3815677/script.sh: line 3: ${params.wtss_version}: bad substitution
++ docker images
+ ((  0>0 ))

1 Ответ

0 голосов
/ 21 февраля 2020

Следующий код является портированием алгоритма на собственный Jenkins Pipeline DSL и Groovy, который будет работать без проблем с синтаксисом. Обратите внимание на комментарии для объяснения его точности преобразования:

stage('Verifying image') {
  agent {
    node { label 'master' }
  }
  steps {
    script {
      // use the shell method to return and assign the stdout of the docker images command to the variable "docker_images"
      docker_images = sh(label: 'list the docker images', script: 'docker images', returnStdout: true)
      // use a regular expression (less restrictive =~ due to no type requirements) to check the contents of the command against the expected value for wtss_version in the params map
      if (docker_images =~ /${params.wtss_version}/) {
        // print a success message
        print "Found file"
      }
      else {
        // print a failure message
         print "Did not find file"
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...