使用Groovy创建一个Jenkins环境变量 [英] Creating a Jenkins environment variable using Groovy
问题描述
我认为这是另一个简单的问题,但我无法得到任何Web解决方案的工作。我的项目需要一个版本号。每个数字可以用'。'或'_'分隔。我想要一个只显示前两个数字的变量。
我试着编写一个创建Jenkins环境变量的groovy脚本。
我想要取前两位数字而不是整个字符串。
//获取版本参数
def env = System.getenv()
def version = env ['currentversion']
def m = version =〜/ \d {1,2} /
env = ['miniVersion':m [0] .m [1]]
我是否可以正确地做这件事,我甚至可以创建一个新的环境变量,并且有更好的解决方案。
Jenkins 1.x
(你已经提供),并将它作为'miniVersion'存储在作业的变量中。
import hudson。 *
def env = System.getenv()
def version = env ['currentversion']
def m = version =〜/ \ d {1,2 } /
def minVerVal = m [0] +。+ m [1]
def pa = new ParametersAction([
new StringParameterValue(miniVersion,minVerVal)
$)b
$ b //将变量添加到当前作业
Thread.currentThread()。executable.addAction(pa)
然后可以从其他构建步骤访问该变量。例如
echo miniVersion =%miniVersion%
输出:
miniVersion = 12.34
我相信您需要使用System Groovy Script(仅在主节点上),而不是Groovy插件 - https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin#Groovyplugin- GroovyScriptvsSystemGroovyScript
Jenkins 2.x
相信以前的( Jenkins 1。 x )行为因此安全公告 a> ... 可以恢复以前的行为通过设置系统属性 允许特定的已知安全参数名称传递给构建,将系统属性 eg I think this is another simple question but I couldn't get any of the web solutions to work. My project takes in a version number. Each number can be separated by a '.' or a '_'. I want a variable that only displays the first two numbers. I tried writing a groovy script that creates a Jenkins environment variable. Am I doing this correctly, can I even create a new environment variable, and is there a better solution to this. The following groovy snippet should pass the version (as you've already supplied), and store it in the job's variables as 'miniVersion'. The variable will then be accessible from other build steps. e.g. Outputs: I believe you'll need to use the "System Groovy Script" (on the Master node only) as opposed to the "Groovy Plugin" - https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin#Groovyplugin-GroovyScriptvsSystemGroovyScript I believe the previous (Jenkins 1.x) behaviour stopped working because of this Security Advisory... It's possible to restore the previous behaviour by setting the system property To allow specific, known safe parameter names to be passed to builds, set the system property e.g.
这篇关于使用Groovy创建一个Jenkins环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
解决方案(从安全咨询中解释)
hudson.model.ParametersAction.keepU ndefinedParameters
到 true
。 这可能是非常不安全的,仅作为短期解决方法。
java -Dhudson。 model.ParametersAction.keepUndefinedParameters = true -jar jenkins.war
hudson.model.ParametersAction.safeParameters
设置为以逗号分隔的安全参数名称列表。
java -Dudson .model.ParametersAction.safeParameters = miniVersion,FOO,BAR -jar jenkins.war
I want to take the first two digits instead of the entire string. //Get the version parameter
def env = System.getenv()
def version = env['currentversion']
def m = version =~/\d{1,2}/
env = ['miniVersion':m[0].m[1]]
Jenkins 1.x
import hudson.model.*
def env = System.getenv()
def version = env['currentversion']
def m = version =~/\d{1,2}/
def minVerVal = m[0]+"."+m[1]
def pa = new ParametersAction([
new StringParameterValue("miniVersion", minVerVal)
])
// add variable to current job
Thread.currentThread().executable.addAction(pa)
echo miniVersion=%miniVersion%
miniVersion=12.34
Jenkins 2.x
Solution (paraphrased from the Security Advisory)
hudson.model.ParametersAction.keepUndefinedParameters
to true
. This is potentially very unsafe and intended as a short-term workaround only.java -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war
hudson.model.ParametersAction.safeParameters
to a comma-separated list of safe parameter names. java -Dhudson.model.ParametersAction.safeParameters=miniVersion,FOO,BAR -jar jenkins.war