通过步骤在Jenkinsfile中传递变量

时间:2018-08-16 12:46:18

标签: jenkins ansible jenkins-pipeline

我有一个包含很多步骤的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",
                                ]
                        ])
                     }
                }
            }
        }
    }
}

希望我能使自己清楚...感谢您的帮助,如果您需要更多信息,请告诉我。

1 个答案:

答案 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,
            ]
          ])
        }
      }
    }
  }
}

让我知道这是否是您想要的