0

我最近开始使用 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
        """
      }
    }
  }
}      
4

1 回答 1

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
"""
于 2018-08-25T00:51:46.260 回答