python - 传递一个 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
谢谢你的想法
解决方案
原来你需要使用三重双引号字符串,"""
sh """
sudo --preserve-env scl enable rh-python36 "behave -D ENV_E2E=${env_e2e} --tags=-skip --junit"
"""
推荐阅读
- html - 更改其选择器正在使用的组件的样式
- node.js - findOneAndModify Mongoose 方法已被弃用但不是真的
- java - 数据库中的记录不更新
- python - 从均值、起始值和结束值绘制偏态分布
- java - 为什么阶段在恢复窗口时忽略新定义的位置?
- python - 如何在同一个 django 模型字段中存储比特币和美元?
- database - 如何从 DynamoDB 中获取所有最新属性值的集合?
- python - 如何在 Django 中更新模型字段后从 MySQL 数据库中查询数据
- javascript - 如何连接前端和后端
- command - 如何使用命令去除重音并保留汉字?