当前位置: 首页 > 面试题库 >

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

吕鹏
2023-03-14
问题内容

在我的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不起作用。您有什么想法为什么不起作用?

感谢您的时间。


问题答案:

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

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


 类似资料:
  • 这个问题似乎被问了多次,但所有答案都与Jenkins Pipeline jobs(插件:workflow job)有关。 我正在将一堆旧的自由式作业从旧的Jenkins独立服务器迁移到分布式Jenkinsenv,我决定将它们转换为Jenkins管道作业(不能使用Blue Ocean,因为SCM是SVN。 无论如何,对于某些作业来说,不希望清理它们的工作空间,因为它们是某种健全/验证作业,而且因为S

  • 我需要从Jenkins作业中获取脚本路径。 请查看下面的屏幕截图,以便更清楚地了解需求。 我已经登录谷歌,获取了一些Groovy控制台脚本,其中列出了每个作业的详细信息。 通过使用jenkins.model.Jenkins.getJobNames()方法,我能够得到Jenkins中的所有作业,但实际上需要的是获得Scriptpath值,在每个作业中提到。 哪个Jenkins类/方法可以提供这些细节

  • 目前,我有一个“包罗万象”的jenkinsfile,其中包含各种函数。为了在其他jenkinsfile中重用这些函数,我想将它们放在单独的groovy脚本中,并从jenkinsfile中加载它们。 scmHandler。groovy: 在jenkinsfile中,我执行以下操作: <代码>。。。def scmHandler=负载(“测试/scmHandler.groovy”)scmHandler。

  • 我为这个问题搜索了很多,但在任何地方都找不到可行的解决方案。有人能帮我吗?我想通过jenkins脚本控制台获取现有的环境变量值。

  • 我正在Liferay控制面板服务器管理脚本控制台中测试一个快速groovy脚本。我需要尝试一下,看看是否可以使用Liferay API以编程方式添加新用户。 我是groovy的新手,可能犯了一个新手错误。我不知道为什么会出错,我一直在努力寻找解决办法。 我正在tomcat上使用Liferay 6.2 EE sp7。 我的脚本代码是 我得到的错误是: groovy.lang.缺少方法异常:没有方法的

  • 问题内容: 除了脚本自己的控制台 (不执行任何操作)之外, 我想打开两个控制台并打印变量,并在不同的控制台中,如何实现此目的。 我不知道如何实现这一目标,并花了几个小时尝试使用诸如但没有运气的模块来实现这一目标。顺便说一下,我在窗户上。 请问模块做的工作?还是需要? 问题答案: 如果您不想重新考虑问题并使用@Kevin回答中的GUI,则可以使用module同时启动两个新控制台,并在打开的窗口中显示