首页 > 解决方案 > 传递一个 Jenkins 变量来表现命令行参数

问题描述

我正在尝试使用 jenkins 运行 python 行为回归测试包。

我有一个设置变量的脚本块,然后我使用shell命令来证明变量设置成功。

但是,当我运行我的 python 行为命令时,变量没有被成功传递。

stage('End to end tests') {
        steps {

            script{
                if(params.containsKey("envname")){
                  env_e2e = "https://url" + params.envname + ".com"
                }else{
                  env_e2e = "https://url.com"
                }

            withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'ui_test_user',
                                    usernameVariable: 'UI_USERNAME', passwordVariable: 'UI_PASSWORD']]) {
                                        sh 'sudo --preserve-env scl enable rh-python36 "cp krb5.conf /etc/krb5.conf"'
                                        sh 'sudo --preserve-env scl enable rh-python36  "echo ${UI_PASSWORD} | kinit ${UI_USERNAME}@****.com"'
            }

            sh """
                echo "my env ${env_e2e}"
                """
            sh 'sudo --preserve-env scl enable rh-python36 "python -m pip install --force-reinstall dist/*.whl"'
            sh 'sudo --preserve-env scl enable rh-python36 "behave -D ENV_E2E=${env_e2e} --tags=-skip --junit"'
            }
        }
         post {
            always {
                archive "reports/*"
                junit 'reports/*.xml'
            }
        }
    }

ENV_E2E 始终解析为空白

在我的 python 行为框架中,我有这个 environment.py 文件

def before_all(context):
env_var = context.config.userdata['ENV_E2E']
logging.info(env_var)
print(len(env_var))
context.pythonlib = PythonLib(service_endpoint_url=env_var)

这只是在运行时返回一个错误,即 env_vars len = 0 并且 service_endpoint 的格式错误,因为它期望 http/https

谢谢你的想法

标签: pythonjenkinscommand-linepython-behave

解决方案


原来你需要使用三重双引号字符串,"""

sh """
sudo --preserve-env scl enable rh-python36 "behave -D ENV_E2E=${env_e2e} --tags=-skip --junit"
"""

推荐阅读