Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过groovy脚本控制台批准Jenkins文件中的脚本片段?_Jenkins_Jenkins Pipeline - Fatal编程技术网

如何通过groovy脚本控制台批准Jenkins文件中的脚本片段?

如何通过groovy脚本控制台批准Jenkins文件中的脚本片段?,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,在jenkins管道文件中,我使用JsonSlurperClassic从.json文件读取构建配置。但是,这会引入需要通过进程内脚本审批页面进行审批的代码。当我在GUI上执行此操作时,效果很好 然而,我也有一个脚本,可以自动设置我的jenkins机器,它应该创建一个准备工作的机器,而不需要进一步的GUI操作。此脚本已经使用jenkins脚本控制台来批准从机启动命令。为此在脚本控制台中执行的groovy代码如下所示 def语言='system command'; def scriptSnippet

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

然而,我也有一个脚本,可以自动设置我的jenkins机器,它应该创建一个准备工作的机器,而不需要进一步的GUI操作。此脚本已经使用jenkins脚本控制台来批准从机启动命令。为此在脚本控制台中执行的groovy代码如下所示

def语言='system command';
def scriptSnippet='sshme@slavemachinejava-jar~/bin/slave.jar';
def scriptApproval=Jenkins.instance.getExtensionList(
'org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval')[0];
def scriptHash=scriptApproval.hash(脚本片段,语言);
scriptApproval.approveScript(scriptHash);
这很好,但现在我想使用相同的代码来批准脚本 来自我的管道的片段。我和他交换了前两行

def语言='groovy'
def scriptSnippet='new groovy.json.JsonSlurperClassic';
其中,
scriptSnippet
取自
scriptApproval.xml
文件。 执行此操作会将新的
条目添加到
scriptApproval.xml
文件中,但不会删除包含脚本片段的
条目。这意味着它不起作用

我的猜测是,语言是错误的,但我尝试的其他值,如
groovy sh
system commands
也不起作用。你知道为什么它不起作用吗

谢谢您的时间。

您可以使用这个方法。下面是一个适用于我的Jenkins 2.85的示例

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

可能是
approveClasspathEntry
方法?你想在这里完成什么?@mkobit我有一个脚本,可以从头开始设置我的jenkins实例。我想让我的詹金斯在脚本执行后准备好。这意味着脚本需要批准我的管道作业中的所有代码段,否则管道作业将在第一次运行时失败,请求通过GUI手动批准脚本。如果这样做有效,我还没有尝试,但是,与其他解决方案相比,批准脚本似乎更方便,而不必知道它们的确切签名。但是,在运行脚本之前,您不知道它们是什么。。。它会失败很多次…我得到一个
原因:java.io.notserializableeexception:org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval$PendingScript
您可以混合使用许可脚本安全插件和此解决方案,并且您不应该再遇到任何审批问题。至少我正在测试这个解决方案,它看起来很有希望。我如何自动批准ScriptApproval#approveSignature方法?使用这个插件
import org.jenkinsci.plugins.scriptsecurity.scripts.*
toApprove = ScriptApproval.get().getPendingScripts().collect()
toApprove.each {pending -> ScriptApproval.get().approveScript(pending.getHash())}