在我的jenkins管道文件中,我使用从.json文件JsonSlurperClassic读取构建配置。但是,这引入了需要 在进程内“脚本批准” 页面上批准的代码。通过GUI执行此操作时,效果很好。
JsonSlurperClassic
但是,我还有一个脚本会自动设置我的jenkins机器,该机器将创建不需要任何GUI操作即可使用的现成机器。该脚本已使用jenkins脚本控制台批准从属启动命令。在脚本控制台中执行此操作的常规代码如下所示。
def language = 'system-command'; def scriptSnippet = 'ssh me@slavemachine java -jar ~/bin/slave.jar'; def scriptApproval = Jenkins.instance.getExtensionList( 'org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval')[0]; def scriptHash = scriptApproval.hash(scriptSnippet, language); scriptApproval.approveScript(scriptHash);
效果很好,但现在我想使用相同的代码来批准来自我的管道的脚本片段。我与交换了前两行
def language = 'groovy' def scriptSnippet = 'new groovy.json.JsonSlurperClassic';
其中,scriptSnippet从所拍摄的scriptApproval.xml文件。执行此操作会<approvedScriptHashes>向scriptApproval.xml文件中添加一个新条目,但不会删除<pendingSignature>包含脚本片段的条目。这意味着它不起作用。
scriptSnippet
scriptApproval.xml
<approvedScriptHashes>
<pendingSignature>
我的猜测是,该语言是错误的,但是我尝试过的其他值都喜欢groovy-sh或system-commands不起作用。您有什么想法为什么不起作用?
groovy-sh
system-commands
感谢您的时间。
您可以使用ScriptApproval#approveSignature方法。这是一个适用于我的詹金斯2.85的示例
ScriptApproval#approveSignature
def signature = 'new groovy.json.JsonSlurperClassic' org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get().approveSignature(signature)