种子工作要求在Jenkins脚本批准

z31licg0  于 2023-08-03  发布在  Jenkins
关注(0)|答案(8)|浏览(145)

我试图在jenkins中执行一个种子作业(使用github url和groovy脚本),得到了以下错误。
第一次建造。跳过更新日志。
处理DSL脚本APIServerDeployer.groovy
错误:脚本尚未批准使用
完成:失败

f4t66c6m

f4t66c6m1#

为了通过这个Jenkins安全功能,你需要批准你的脚本。点击Manage Jenkins -> In-process Script Approval。在该屏幕中,您将看到您试图执行的脚本。应该有一个批准按钮,您需要单击批准该脚本。
x1c 0d1x的数据

olhwl3o2

olhwl3o22#

Job DSL版本1.60引入了脚本安全性;要恢复旧的行为,请在“配置全局安全性”页面的“CSRF保护”部分取消选中 * 为作业DSL脚本启用脚本安全性 *。只有当你有另一种批准脚本的方式时才应该这样做,比如如果你的种子作业构建了生活在git中的作业,那么通过git pull request approval。

qyzbxkaa

qyzbxkaa3#

下面是一个groovy脚本,我们使用它来预填充脚本批准:

import java.lang.reflect.*;
import jenkins.model.Jenkins;
import jenkins.model.*;
import org.jenkinsci.plugins.scriptsecurity.scripts.*;
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.*;

scriptApproval = ScriptApproval.get()
alreadyApproved = new HashSet<>(Arrays.asList(scriptApproval.getApprovedSignatures()))

// add all manual whitelist methods here.

approveSignature('method groovy.json.JsonBuilder call java.util.List')
approveSignature('method groovy.json.JsonSlurper parseText java.lang.String')
approveSignature('method groovy.json.JsonSlurperClassic parseText')
approveSignature('method groovy.lang.Binding getVariables')
approveSignature('method groovy.lang.Binding getVariable java.lang.String')
approveSignature('method groovy.lang.Binding hasVariable java.lang.String')
approveSignature('method groovy.lang.Closure getMaximumNumberOfParameters')
approveSignature('method groovy.lang.GString plus java.lang.String')
approveSignature('method groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object')
approveSignature('method hudson.model.Actionable getAction java.lang.Class')
approveSignature('method hudson.model.Actionable getActions')
approveSignature('method hudson.model.Cause$UpstreamCause getUpstreamProject')
approveSignature('method hudson.model.Cause$UserIdCause getUserId')
approveSignature('method hudson.model.ItemGroup getItem java.lang.String')
approveSignature('method hudson.model.Item getUrl')
approveSignature('method hudson.model.Job getBuildByNumber int')
approveSignature('method hudson.model.Job getLastBuild')
approveSignature('method hudson.model.Job getLastSuccessfulBuild')
approveSignature('method hudson.model.Job isBuilding')
approveSignature('method hudson.model.Run getCauses')
approveSignature('method hudson.model.Run getEnvironment hudson.model.TaskListener')
approveSignature('method hudson.model.Run getParent')
approveSignature('method hudson.model.Run getNumber')
approveSignature('method hudson.model.Run getResult')
approveSignature('method hudson.model.Run getUrl')
approveSignature('method hudson.model.Run getLogFile')
approveSignature('method java.util.Map containsKey java.lang.Object')
approveSignature('method java.util.Map entrySet')
approveSignature('method java.util.Map get java.lang.Object')
approveSignature('method java.util.Map keySet')
approveSignature('method java.util.Map putAll java.util.Map')
approveSignature('method java.util.Map remove java.lang.Object')
approveSignature('method java.util.Map size')
approveSignature('method java.util.Map values')
// ... your list here ...

scriptApproval.save()

void approveSignature(String signature) {
    if (!alreadyApproved.contains(signature)) {
       scriptApproval.approveSignature(signature)
    }
}

// Utility methods
String printArgumentTypes(Object[] args) {
    StringBuilder b = new StringBuilder();
    for (Object arg : args) {
        b.append(' ');
        b.append(EnumeratingWhitelist.getName(arg));
    }
    return b.toString();
}

字符串

wlwcrazw

wlwcrazw4#

如果你使用的是Jenkins Groovy DSL,这里有一个代码片段,你可以用它来批准每个待定的脚本:

import org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval

ScriptApproval scriptApproval = ScriptApproval.get()
scriptApproval.pendingScripts.each {
    scriptApproval.approveScript(it.hash)
}

字符串
参见:https://javadoc.jenkins.io/plugin/script-security/org/jenkinsci/plugins/scriptsecurity/scripts/ScriptApproval.html

iqjalb3h

iqjalb3h5#

Job DSL版本1.60引入了Script Security,它要求您将脚本列入白名单。
另请阅读有关迁移到1.60的提示。

wlzqhblo

wlzqhblo6#

如果您想通过编程禁用它,请将以下脚本放入$JENKINS_HOME/init.groovy.d/disable-script-security.groovy

import javaposse.jobdsl.plugin.GlobalJobDslSecurityConfiguration
import jenkins.model.GlobalConfiguration

// disable Job DSL script approval
GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).useScriptSecurity=false
GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).save()

字符串

yk9xbfzb

yk9xbfzb7#

给予在“配置全局安全性”设置下禁用作业DSL脚本的脚本安全性。Disable script security for Job DSL scripts

ycggw6v2

ycggw6v28#

确保你已经在管道下面启用了groovy沙箱

相关问题