背景
- 使用jenkins的pipeline构建流水线;
由于使用场景,我们希望jenkins container run起来后,slave就可以读取到已经配置好的业务环境变量,而非在jenkins配置页面设置全局环境变量。故pipeline的groovy script需要将master的ENV传递到slave的脚本。
#!/usr/bin/env groovypipeline {agent {label 'TEST_AGENT'}environment {PATH = "/bin:/usr/bin:/usr/local/bin:$PATH"ANALYSE_WORKSPACE = "${workspace}"TEST_URL = "${System.getenv('TEST_URL')}"}}
问题
解决
1. 编写配置文件
scriptApproval{approvedSignatures=['method groovy.util.ConfigSlurper parse java.lang.String','staticMethod java.lang.System getenv java.lang.String','method org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval approveSignature java.lang.String','staticMethod org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval get']}
备注:不同的错误,需要不同的配置文件。上述配置仅适用本文case。
2. 脚本命令行
在jenkins页面【脚本命令行】,执行如下命令
import org.jenkinsci.plugins.scriptsecurity.scripts.*ScriptApproval script = ScriptApproval.get()ConfigObject conf = new ConfigSlurper().parse(new File(System.getenv("JENKINS_HOME") + '/jenkins_config/scriptApproval.txt').text)conf.scriptApproval.approvedSignatures.each{ approvedSignature ->println("checking for new signature ${approvedSignature}")def found = script.approvedSignatures.find { it == approvedSignature }if (!found){println("Approving signature ${approvedSignature}")script.approveSignature(approvedSignature)}}
