我有一个包含很多步骤的Jenkins文件。
这是我的问题:
1)我想运行ansible剧本,并让var在Jenkins中运行(例如环境变量之类的东西)
2)我想在另一个步骤中运行另一个剧本,并使用该变量。
示例:
pipeline {
stages {
stage('run ansible play1') {
steps {
dir("${WORKSPACE}") {
ansiblePlaybook([
inventory : 'hosts',
playbook : 'playbook1.yml',
installation: 'ansible',
colorized : true,
extraVars : [
var1: "blah1",
var2: "blah2",
]
])
}
}
}
}
stage('run ansible play2') {
steps {
dir("${WORKSPACE}") {
ansiblePlaybook([
inventory : 'hosts',
playbook : 'playbook2.yml',
installation: 'ansible',
colorized : true,
extraVars : [
var_from_last_play: "some_value",
]
])
}
}
}
}
}
}
希望我能使自己清楚...感谢您的帮助,如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
在Jenkins管道上,您可以像下面这样在脚本顶部声明环境变量:
import xlsxwriter,datetime,time
wb=xlsxwriter.Workbook('test.xlsx')
ws=wb.add_worksheet('test')
ws.write_row(0,0,['aaaa',str(datetime.datetime.now())])
try:
wb.close()
except IOError :
print('save error, please close file, will retry in 10')
time.sleep(10)
wb.close()
这样,您可以在所需的任何阶段获取变量,也可以在之前的阶段(从脚本等输出)将其设置为所需的值
另一种方法是在最外头的'pipeline {...}'标记处声明一个全局变量作为Groovy'def',然后执行相同的操作,但它不如其他解决方案那么干净
pipeline {
environment {
MY_ENV_VAR='something' // Added variable
}
stages {
stage('run ansible play1') {
steps {
dir("${WORKSPACE}") {
ansiblePlaybook([
inventory : 'hosts',
playbook : 'playbook1.yml',
installation: 'ansible',
colorized : true,
extraVars : [
var1: "blah1",
var2: "blah2",
]
])
// you can also assign new value to the env
// variable depending on results of the script execution
// env.MY_ENV_VAR = 'something'
}
}
}
stage('run ansible play2') {
steps {
dir("${WORKSPACE}") {
ansiblePlaybook([
inventory : 'hosts',
playbook : 'playbook2.yml',
installation: 'ansible',
colorized : true,
extraVars : [
var_from_last_play: env.MY_ENV_VAR,
]
])
}
}
}
}
}
让我知道这是否是您想要的