如何获取Jenkinsfile中的参数值并传入Python脚本中使用?
解决方案
Jenkins 中定义的构建参数无需特殊模块读取,会自动暴露到构建任务的运行环境中,常用的传递给 Python 脚本的方式有两种:
方法1:通过环境变量传递(推荐)
这种方式无需处理参数转义问题,适配带空格、特殊字符的参数场景。
修改Jenkinsfile
在执行Python脚本的步骤中通过withEnv将构建参数注入到环境变量:
pipeline { agent any parameters { // 原有参数定义保持不变 string(name: 'INSTANCETYPE', defaultValue: 't2.micro', description: 'e.g. t2.micro') string(name: 'PR', defaultValue: '', description: 'Project') string(name: 'OWNER', defaultValue: '', description: 'Owner for instance') string(name: 'OS', defaultValue: '', description: 'Operative System e.g REDHAT') } stages { stage('创建EC2实例') { steps { withEnv([ "INSTANCETYPE=${params.INSTANCETYPE}", "PR=${params.PR}", "OWNER=${params.OWNER}", "OS=${params.OS}" ]) { sh 'python3 test.py' } } } } }
修改Python脚本
通过Python内置的os模块读取环境变量即可:
import os import boto3 # 你原有创建实例的代码保持不变,这里省略 # instances = ec2.create_instances(...) # 读取环境变量中的Jenkins参数 instancetype = os.getenv('INSTANCETYPE') pr = os.getenv('PR') owner = os.getenv('OWNER') os_type = os.getenv('OS') ec2.create_tags( Resources=[ instances[0].id, ], Tags=[ { 'Key': 'Instance', 'Value': instancetype }, { 'Key': 'PR', 'Value': pr }, { 'Key': 'Owner_Instance', 'Value': owner }, { 'Key': 'Operative_System', 'Value': os_type }, ] )
方法2:通过命令行参数传递
直接在调用Python脚本时将参数作为命令行入参传入:
Jenkinsfile修改
stage('创建EC2实例') { steps { sh "python3 test.py '${params.INSTANCETYPE}' '${params.PR}' '${params.OWNER}' '${params.OS}'" } }
Python脚本修改
通过内置的sys模块读取命令行参数:
import sys import boto3 # 按顺序读取命令行入参,sys.argv[0]为脚本本身名称 instancetype = sys.argv[1] pr = sys.argv[2] owner = sys.argv[3] os_type = sys.argv[4] # 打标签逻辑和方法1一致
注意事项
- 若参数包含空格、引号等特殊字符,优先使用环境变量的传递方式,避免命令行转义错误
- 可以在Python脚本中添加参数非空校验,避免参数遗漏导致的打标异常
内容的提问来源于stack exchange,提问作者dahwild
相关产品推荐
相关产品推荐

