使用jenkins文件设置jenkins环境变量
在Jenkins1中,我们有一个脚本来设置环境变量,类似于:使用jenkins文件设置jenkins环境变量,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,在Jenkins1中,我们有一个脚本来设置环境变量,类似于: //...imports instance = Jenkins.getInstance() globalNodeProperties = instance.getGlobalNodeProperties() envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class) newEnv
//...imports
instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()
envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
newEnvVarsNodeProperty = null
envVars = null
if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
globalNodeProperties.add(newEnvVarsNodeProperty);
envVars = newEnvVarsNodeProperty.getEnvVars();
envVars.put(NEW_VAR, "toto");
} else {
for (property in envVarsNodePropertyList) {
envVars = property.getEnvVars();
envVars.put("EXISTING_VAR","tata");
}
}
instance.save()
今天我们使用的是Jenkins2,具有jenkinsfile功能,我想知道如何在jenkinsfile中执行相同的操作
这是否可行,如果可行,是否有更好的方法
def setEnvVar() {
script {
//all the script above
}
}
pipeline {
agent any
tools {
maven 'Maven3_6'
jdk 'Jdk8'
}
stages {
stage ('Initialize') {
steps {
setEnvVar()
}
}
...
编辑:假设我有一个现有的env变量,LAST_DEPLOY=“0.1”,使用:
只会修改当前执行的变量,最终会重置为“0.1”,我希望修改能持续到下一个版本。只需查看官方文档
然后您可以在sh步骤中使用它,比如${NODE_ENV}只需查看官方文档
然后您可以在sh步骤中使用它,如${NODE_ENV}因此,我找到的当前解决方案是将其添加到jenkins文件中:
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
import hudson.slaves.*
def updateEnvVar() {
script {
instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()
envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
newEnvVarsNodeProperty = null
envVars = null
if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
globalNodeProperties.add(newEnvVarsNodeProperty);
envVars = newEnvVarsNodeProperty.getEnvVars();
envVars.put(NEW_VAR, "toto");
} else {
for (property in envVarsNodePropertyList) {
envVars = property.getEnvVars();
envVars.put("EXISTING_VAR","tata");
}
}
instance.save()
}
}
pipeline {
...
首先,Jenkins将发送一些安全错误,您可以通过转到管理Jenkins->过程中脚本批准->批准来修复这些错误(风险自负)
Cf:
因此,我找到的当前解决方案是在jenkins文件中添加以下内容:
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
import hudson.slaves.*
def updateEnvVar() {
script {
instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()
envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
newEnvVarsNodeProperty = null
envVars = null
if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
globalNodeProperties.add(newEnvVarsNodeProperty);
envVars = newEnvVarsNodeProperty.getEnvVars();
envVars.put(NEW_VAR, "toto");
} else {
for (property in envVarsNodePropertyList) {
envVars = property.getEnvVars();
envVars.put("EXISTING_VAR","tata");
}
}
instance.save()
}
}
pipeline {
...
首先,Jenkins将发送一些安全错误,您可以通过转到管理Jenkins->过程中脚本批准->批准来修复这些错误(风险自负)
Cf:
但是我测试了这个,如果我执行类似于环境的操作{TITI=“TITI_V0”}TITI将仅在当前jenkins执行中可见,而不会在下一次执行中可见。我希望能够在jenkins文件中创建一个Env变量,该变量在jenkins执行结束时仍然存在,但是我测试了这个变量,如果我执行类似于环境的操作{TITI=“TITI_V0”}TITI将仅在当前jenkins执行中可见,在下一次执行中不可见。我希望能够在jenkins文件中创建一个Env变量,该变量在jenkins执行结束时仍然存在。我不知道有任何内在功能可以实现这一点,因此您最好不要使用您编写的方法nto共享库并在
Jenkinsfile
中调用它。你检查过我下面的答案吗?@MostafaHusseinenv.variable
不起作用,我刚刚尝试过,正如我在问题编辑中解释的,我会尽快尝试def variable=“smt”
env.variable
应该可以正常工作。为了确认我使用的是声明性语法,我可以将变量从一个阶段传递到另一个阶段。关于环境{}
我以前没有使用过它,所以我不确定它是否与env.variable
相同,在同一执行过程中从一个阶段到另一个阶段是相同的,但是如果重新启动管道,对env.variable
所做的任何修改都将丢失。我不知道有任何内在功能可以实现这一点,因此您可能会更好将您编写的方法推迟到共享库中,并在Jenkinsfile
中调用它。您检查了我下面的答案吗?@MostafaHusseinenv.variable
不起作用,我刚刚尝试过,正如我在问题编辑中解释的,我很快就会尝试def variable=“smt”
env.variable
应该可以正常工作。为了确认我使用的是声明性语法,我可以将变量从一个阶段传递到另一个阶段。关于环境{}
我以前没有使用过它,因此我不确定它是否与环境变量相同
是在同一执行过程中从一个阶段到另一个阶段,但如果重新启动管道,则对环境变量所做的任何修改都将丢失
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
import hudson.slaves.*
def updateEnvVar() {
script {
instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()
envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
newEnvVarsNodeProperty = null
envVars = null
if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
globalNodeProperties.add(newEnvVarsNodeProperty);
envVars = newEnvVarsNodeProperty.getEnvVars();
envVars.put(NEW_VAR, "toto");
} else {
for (property in envVarsNodePropertyList) {
envVars = property.getEnvVars();
envVars.put("EXISTING_VAR","tata");
}
}
instance.save()
}
}
pipeline {
...