Jenkins审查制度
在 Jenkins 中,In-process Script Approval 是一种安全机制,主要用于 防止未经审查的脚本执行。即使 Jenkinsfile 看起来没有涉及权限审批的地方,但可能还是触发了 Jenkins 的 脚本安全策略,需要管理员审批。这通常发生在以下几种情况下:
1. Groovy 脚本运行在 Sandbox 之外
Jenkins 使用 Groovy Sandbox 来运行 Pipeline 脚本,它会对部分代码进行限制。如果 Jenkinsfile 中的某些语法或方法 不在安全白名单内,就会触发安全机制,要求管理员审批。
例如:
- 使用 任意方法调用(特别是自定义的库或插件方法)。
- 调用不受信任的外部类或代码。
示例:
def result = sh(script: 'someCommand', returnStdout: true)
某些 sh
命令或特殊写法可能触发审批。
2. 动态代码执行
如果 Jenkinsfile 中有涉及 动态方法调用、闭包、或者动态代码执行(如 evaluate()
、script
块等),Jenkins 会认为这些代码 潜在地绕过安全机制,因此必须经过审批。
3. 插件引入的非安全操作
可能使用了某些 Pipeline 插件,这些插件默认未被 Jenkins 认为是安全的,必须由管理员审批才能运行。
4. 非受信任方法调用
Jenkins 在执行脚本时会检查脚本中调用的方法,任何未被标记为安全的方法(即未在 Jenkins 的白名单内)都会触发审批。
例如:
new File('/etc/passwd').text
这种访问本地文件系统的操作会被禁止,除非管理员明确审批。
解决方法:
- 管理员审批: 在 Script Approval 页面 审批 Jenkinsfile 中的代码片段。
- 使用安全白名单: 避免使用非白名单的方法和动态脚本执行。
- 开启 Groovy Sandbox: 在 Jenkinsfile 设置中启用 Groovy Sandbox,让代码在受限环境中执行。
- 代码审查: 确保 Jenkinsfile 中没有潜在的安全问题或高危操作。
为什么需要审批?
Jenkins 设计这个机制是为了防止恶意脚本被注入到流水线中,尤其是在多人协作或自动化构建环境下,未经审查的脚本可能会:
- 绕过安全限制。
- 访问服务器上的敏感数据或文件。
- 执行破坏性操作。