首页 文章

如何使用Groovy API检索Jenkins构建参数?

提问于
浏览
27

我有一个使用Perforce插件的参数化作业,并希望检索构建参数/属性以及Perforce插件设置的p4.change属性 .

如何使用Jenkins Groovy API检索这些属性?

7 回答

  • 14

    关于参数:

    See this answer first . 获取项目的所有构建的列表(根据该答案获得):

    project.builds
    

    当您找到特定的构建时,需要使用build.getActions(hudson.model.ParametersAction)获取ParametersAction类型的所有操作 . 然后,您可以在返回的对象中查询特定参数 .

    关于p4.change:我怀疑它也存储为一个动作 . 在Jenkins Groovy控制台中获取包含p4.change的构建的所有操作并检查它们 - 它将让您知道在代码中要查找的内容 .

  • 2

    请注意官方Jenkins Wiki页面也会详细介绍这一点:https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script重要部分转载如下:

    // get parameters
    def parameters = build?.actions.find{ it instanceof ParametersAction }?.parameters
    parameters.each {
       println "parameter ${it.name}:"
       println it.dump()
    }
    
    // ... or if you want the parameter by name ...
    def hardcoded_param = "FOOBAR"
    def resolver = build.buildVariableResolver
    def hardcoded_param_value = resolver.resolve(hardcoded_param)
    
  • 10

    为了解决单个参数(我想最常需要的),这是我发现的最简单的:

    build.buildVariableResolver.resolve(“myparameter”)

    在Groovy System脚本构建步骤中 .

  • 1

    我刚刚使用了Groovy Postbuild插件,你可以做到以下几点:

    def paramText
    def actionList = manager.build.getActions(hudson.model.ParametersAction)
    if (actionList.size() != 0)
    {
      def pA = actionList.get(0)
      paramText = pA.createVariableResolver(manager.build).resolve("MY_PARAM_NAME")
    }
    
  • 23

    如果参数名称无法硬编码,我发现这将是访问参数的最简单和最好的方法:

    def myParam = env.getProperty(dynamicParamName)
    

    在某些情况下,当参数名称已知且可以硬编码时,以下3行是等效的:

    def myParam = env.getProperty("myParamName")
    def myParam = env.myParamName
    def myParam = myParamName
    
  • 24

    获取所有参数:

    System.getenv().each{
      println it
    }
    

    或更复杂:

    def myvariables = getBinding().getVariables()
    for (v in myvariables) {
       echo "${v} " + myvariables.get(v)
    }
    

    两者都需要 disable "Use Groovy Sandbox" .

  • 1

    要从GroovyScript(使用Pipeline)获取当前构建的参数化构建参数,您需要做的就是:假设您有一个名为VARNAME的变量 .

    def myVariable = env.VARNAME

相关问题