小编典典

如何通过groovy脚本控制台从jenkinsfile批准脚本片段?

jenkins

在我的jenkins管道文件中,我使用从.json文件JsonSlurperClassic读取构建配置。但是,这引入了需要 在进程内“脚本批准”
页面上批准的代码。通过GUI执行此操作时,效果很好。

但是,我还有一个脚本会自动设置我的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>包含脚本片段的条目。这意味着它不起作用。

我的猜测是,该语言是错误的,但是我尝试过的其他值都喜欢groovy-shsystem-commands不起作用。您有什么想法为什么不起作用?

感谢您的时间。


阅读 424

收藏
2020-07-25

共1个答案

小编典典

您可以使用ScriptApproval#approveSignature方法。这是一个适用于我的詹金斯2.85的示例

def signature = 'new groovy.json.JsonSlurperClassic'
org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get().approveSignature(signature)
2020-07-25