Как передать параметры команде bash в пределах stage / steps в декларативном конвейере Jenkins? - PullRequest
0 голосов
/ 25 августа 2018

Я недавно начал использовать Дженкинс. Я предоставляю два параметра для сбора динамических настроек и буду использовать их в последующих этапах / шагах (в скрипте bash). Я привожу несколько примеров, таких как

https://github.com/jenkinsci/pipeline-examples/blob/master/declarative-examples/jenkinsfile-examples/mavenDocker.groovy

Я пытался использовать параметр напрямую или через окружение, множественные комбинации, одинарные кавычки, двойные кавычки и т. Д. Но значение, полученное из параметров, все еще НЕ могло быть успешно передано команде bash. Я считал, что это очень основное требование, но я не могу найти подходящий рабочий пример.

Вот мой пример кода.

pipeline {

  agent {
    docker {
      image ...
      args ...
    }
  }

  environment {
    USERNAME = ${params.E_USERNANE}
    BRANCH = ${params.E_BRANCH}
  }

  parameters {
    string(name: 'E_USERNANE', defaultValue: 'githubuser', description: 'Please input the username')
    string(name: 'E_BRANCH', defaultValue: 'dev', description: 'Please input the git branch you want to test')
  }

  stages {
    stage('build') {
      steps {
        echo "username: ${params.E_USERNANE}"
        echo "branch: ${params.E_BRANCH}"
        echo E_USERNANE
        echo E_BRANCH
        sh """
          echo ${USERNAME} > /mydata/1.tmp
          echo ${BRANCH} >> /mydata/1.tmp
        """
      }
    }
  }
}      

1 Ответ

0 голосов
/ 25 августа 2018

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

  environment {
    USERNAME = "${params.E_USERNANE}"
    BRANCH = "${params.E_BRANCH}"
  }

Параметры собираются и передаются в среду, а затем определение переменных среды будет использоваться при инструктировании сценариев. Смотрите больше на jenkins.io/doc/pipeline/tour/environment.

Я хотел бы также включить решение lvthillo здесь. Вместо этого мы могли бы удалить часть среды {} и использовать следующие сценарии bash на этапе / шагах для достижения той же цели.

sh """
echo "${params.E_USERNANE}" > /mydata/1.tmp
echo "${params.E_BRANCH}" >> /mydata/1.tmp
"""
...