一、判断Jenkins版本
可以在Jenkins的Dashboard的Manage Jenkins按钮下,最下端查看:
如此处,我的Jenkins版本为2.263.2,在更高版本(如2.361.4),可以使用Pipeline Utility Steps插件去调用一些方法读取ini配置文件:
而低版本的Jenkins则需要使用一些“曲线救国“的方式来实现。这里我的思路是python脚本读取config.ini文件存入Jenkins脚本的字典中,并在后续流水线中调用。
二、准备config.ini配置文件
项目中,构建的Job完善以后,很多时候需要构建不同的版本,而此时流水线框架可通用,但版本与版本所需的参数不一定相同,所以此时可以根据自己的需求,准备config.ini文件。格式按照节-键值对来配置:
;这是A的配置
[A]
key1=value1
key2=value2
;这是B的配置
[B]
key1=value1
key2=value2
;这是C的配置
[C]
key1=value1
key2=value2
三、Python脚本读取本地config.ini文件
由于上文所述,我的Jenkins的版本较低,无法在Jenkins流水线构建中直接读取配置文件,所以这里我使用了python编写了一个脚本去读取本地的ini文件,并以json格式输出:
这里注意,Configparser()方法输出会把所有的键替换为小写,建议配置文件统一使用小写
import configparser
import sys
import json
def get_config(Version, config_file):
config = configparser.ConfigParser()
config.read(config_file, encoding='utf-8')
Version = dict(config[Version])
#后续参数更新直接添加
print(json.dumps({
'key1': Version.get('key1'),
'key2': Version.get('key2')
}))
if __name__ == '__main__':
Version = sys.argv[1]
config_file = sys.argv[2]
get_config(Version, config_file)
其中第一个Version参数为节A、B和C的代称;如我需要每次构建选择不同的版本构建,那么A、B、C则为不同的版本(可以在Jenkins的Job中添加参数对应)。下面的json输出包括配置文件中所有的键(如果某个键对应的值为空,这里会输出none,需要根据具体情况处理)。第二个config_file参数为本地config.ini文件的路径,依赖后续流水线脚本传入。
四、准备Jenkins初始化脚本
在Jenkins中,可以使用数组+字典的组合来存放每一次读取的字符串值,在后续流水线中,可以直接使用powershell读取字典中的值:
// 数组存放参数(支持后期拓展)
def conf_params = [
'key1',
'key2'
]
// 定义一个字典存放数组元素
def conf_param = [:]
env.work_dir = 'D:\\Script'
stage('Initializing'){
// 初始化构建版本所需参数
conf_params.each{item ->
conf_param[item] = powershell(script: "(python ${env.work_dir}\\Get_Config.py ${params.Version} ${env.work_dir}\\config.ini | ConvertFrom-Json).${item}", returnStdout: true).trim()
}
}
stage('Build'){
echo "${conf_param['key1']}"
echo "${conf_param['key2']}"
// 构建步骤
}