其他分享
首页 > 其他分享> > Jenkins Permissive Script Security禁用沙箱sandbox模式遇到的坑

Jenkins Permissive Script Security禁用沙箱sandbox模式遇到的坑

作者:互联网

【问题背景】: 

Jenkins job过多导致pipline过多无法维护, 考虑实现归一化版本控制. 分离job配置数据和jenkins流程, 把pipline主逻辑流程代码化, 使得修改维护简单&同时避免误修改导致的无意义工作.

具体方案:

    1.抽离数据, 将配置数据集中存放在$JENKINS_HOME/userContent/projects目录下.复用jenkins服务.

    2.制作模板, 将模板中的数据配置获取全部改为通过job_name关联的api请求. 把执行构建参数转交给projects目录控制.

 遇到的问题: Jenkins Pipline脚本可以通过开关控制关闭sandbox, 但是SCM(git)拉取的方式默认在沙箱执行, 没有提供控制开关.遇到网络请求等函数, 会提示权限错误如下.

 

 

 沙箱机制把潜在危险的执行权限让渡给管理员, 需要管理员手动去确认.这种玩法会累死人,也不使用于代码化的经常修改的东西.

Google了许多:基本分为三种方案: 1.@whitelist装饰器方案: 给函数加这个装饰器, 开白名单; (没啥用,放弃)

                                                      2.关闭沙箱或者手动授权; (相当于没说)

                                                      3.插件默认禁用沙箱Permissive Script Security (只有这条路了)

【Permissive Script Security】: 

这个插件有点坑, 官方(https://plugins.jenkins.io/permissive-script-security/#dependencies)默认安装后是关闭的, 需要带jvm启动参数去开启.

有两种靠谱的修改方案: 1. config.xm方案. (https://stackoverflow.com/questions/38276341/jenkins-ci-pipeline-scripts-not-permitted-to-use-method-groovy-lang-groovyobject/39412951#39412951)

                                          修改xml配置没有说清楚配置层级, 放在第一级别, 重启服务后没有用.而且xml中的配置丢失了(怀疑与容器相关).  

 

 

                                     2.修改jvm参数, 官方说明是要作为master JVM运行参数使用.

                                       修改容器内jenkins启动脚本/usr/local/bin/jenkins.sh (说明: 容器镜像源于docker-hub, 官方发布的lts)

 

 注意: -Dpermissive-script-security.enabled=true   这个参数必须在 -jar前面, 在-jar后面也不会生效.

相关连的社区bug单说明中, 提单的同学应该也是中招了.

https://issues.jenkins.io/browse/JENKINS-47570?focusedCommentId=342795&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-342795

 

 

按照这个提示, JENKINS_URL/script 中打印这俩参数, 果然是与位置相关. (JAVA & JVM机制不太了解)

 

标签:Permissive,Script,修改,参数,Jenkins,沙箱,jenkins
来源: https://www.cnblogs.com/woruo/p/14355868.html