我正在为一个maven项目的CICD编写一个声明性的Jenkins管道。我设置了一个名为REL_VER
的环境变量,它可以采用0.1-rc1
,0.20-alpha1
,0.15-beta2
等形式。
environment {
REL_VER = '0.1-alpha1'
DEV_VER = '0.1-SNAPSHOT'
}
我需要拆分REL_VER
并将名为osgi_ver
的第一个元素传递给我在steps
中运行的shell命令,以根据{的答案替换Java文件中的单词{3}}
stages {
stage('package') {
steps {
script {
def vars = Jenkins.instance.getGlobalNodeProperties()[0].getEnvVars()
def osgi_ver = vars['REL_VER'].tokenize('-')[0]
}
sh "echo ${osgi_ver}"
withMaven(
maven: 'maven-3.3.9',
mavenSettingsConfig: 'dist-maven-settings',
mavenLocalRepo: '.m2repo') {
sshagent (credentials: ['dist-serv']) {
sh "sed -i '/setSystemExtraPackages/s/.*/\t\t.setSystemExtraPackages(new String[]{\"com.xxx;version=${osgi_ver}\"}));/' DsgPluginTest.java"
但是我收到错误org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod jenkins.model.Jenkins getInstance
操作env var并将创建的var作为参数发送给声明性管道中的后续步骤的正确方法是什么?
答案 0 :(得分:1)
它不允许您拨打Jenkins.instance
。但是,您不需要这样做来获取环境变量。 env.REL_VER
可以这样工作:
pipeline {
agent { label 'docker' }
environment {
REL_VER = '0.1-alpha1'
}
stages {
stage('build') {
steps {
script {
def osgi_ver = env.REL_VER.tokenize('-')[0]
echo "osgi_ver in script block: ${osgi_ver}"
withMaven(maven: 'maven-3.3.9', mavenSettingsConfig: 'dist-maven-settings', mavenLocalRepo: '.m2repo') {
sshagent (credentials: ['dist-serv']) {
sh "sed -i '/setSystemExtraPackages/s/.*/\t\t.setSystemExtraPackages(new String[]{\"com.xxx;version=${osgi_ver}\"}));/' DsgPluginTest.java"
}
}
}
}
}
}
}
请注意,如果您要在script
块中定义局部变量,则对它的所有引用也必须位于同一script
块中。