如何在Jenkins声明式管道的阶段/步骤中将参数传递给bash命令?

时间:2018-08-24 22:17:10

标签: jenkins-declarative-pipeline

我最近开始使用Jenkins。我提供了两个参数来收集动态设置,并将在以后的阶段(步骤)中使用它们(在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 :(得分:0)

我的同事真是太棒了。我们应该更改环境部分,如下所示:

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

收集参数并将其传递给环境,然后在指令脚本中使用定义的环境变量。有关更多信息,请访问jenkins.io/doc/pipeline/tour/environment。

我也想在这里包括lvthillo的解决方案。我们可以删除environment {}部分,并在阶段/步骤中使用以下bash脚本来实现相同的目标。

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