首页 文章

在Jenkins构建步骤中从groovy脚本访问构建环境变量(Windows)

提问于
浏览
43

我正在使用Scriptler插件,所以我可以运行一个groovy脚本作为构建步骤 . 我的Jenkins奴隶在服务模式下运行在Windows上 . 使用scriptler,我不需要使用Windows批处理脚本 .

但我很难在构建步骤中获取环境变量...这是有效的:

System.getenv("BASE")

BASE 是jenkins创业公司env-vars的一部分 . 但是,我想得到

%JOB_NAME%

如果我正在添加“执行Windows批处理命令”构建步骤:

echo %JOB_NAME%

有用 . 如果我使用相同的设置添加脚本编写器脚本作为构建步骤:

println "JOB_NAME: " + System.getenv("JOB_NAME")

我越来越:

JOB_NAME: null

那么如何从groovy脚本中获取注入的环境变量作为构建步骤?

7 回答

  • 50

    Jenkins 2.x有全局变量 . env 是任何一个脚本中的一个......

    println env.JOB_NAME
    

    更多https://build.intuit.com/services-config/pipeline-syntax/globals#env

  • 5

    有一点需要注意,如果您使用的是自由式作业,除非您正在使用System Groovy Script构建步骤,否则您将无法访问构建参数或Jenkins JVM的环境 . 我花了几个小时的谷歌搜索和研究,然后收集足够的线索来解决这个问题 .

  • 17

    Scriptler Groovy脚本似乎没有获得构建的所有环境变量 . 但是你可以做的是强制它们作为脚本的参数:

    • 将Scriptler构建步骤添加到作业中时,选择“定义脚本参数”选项

    • 为要传入的每个环境变量添加一个参数 . 例如“Name:JOB_NAME”,“Value:$ JOB_NAME” . 该值将使用'$ envName'类型变量从Jenkins构建环境扩展,作业配置设置中的大多数字段支持我的经验中的这种扩展 .

    • 在脚本中,您应该有一个与参数同名的变量,因此您可以使用以下内容访问参数:

    println“JOB_NAME = $ JOB_NAME”

    除了一些实验之外,我自己没有使用过Sciptler,但你的问题提出了一个有趣的问题 . 我希望这有帮助!

  • 6

    系统常规执行期间存在 build 对象 . 你可以这样做:

    def myVar = build.getBuildVariables().get('myVar')
    
  • 8

    你或许可以这样得到它们:

    def thr = Thread.currentThread()
    def build = thr?.executable
    def envVarsMap = build.parent.builds[0].properties.get("envVars")
    
  • 1

    在jenkins 2.x上,使用groovy插件2.0,运行 SystemGroovyScript 我设法构建变量,如下所示:

    def build = this.getProperty('binding').getVariable('build')
    def listener = this.getProperty('binding').getVariable('listener')
    def env = build.getEnvironment(listener)
    println env.MY_VARIABLE
    

    如果你在文件中使用goovy,那么简单_2714464就足够了

  • 1

    我能够使用它(在Linux上)的唯一方法是遵循这个建议:

    https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script

    import hudson.model.*
    
    // get current thread / Executor and current build
    def thr = Thread.currentThread()
    def build = thr?.executable
    
    // if you want the parameter by name ...
    def hardcoded_param = "FOOBAR"
    def resolver = build.buildVariableResolver
    def hardcoded_param_value = resolver.resolve(hardcoded_param)
    
    println "param ${hardcoded_param} value : ${hardcoded_param_value}"
    

    这是在CentOS 6.7上运行的Jenkins 1.624上

相关问题