如何配置Jenkins Job禁止被其他Jenkinsfile触发 仅允许指定上游Job触发
Jenkins任务定向触发配置方案
存在完全可行的实现方式,核心是通过「BB端收紧触发权限+源头校验拦截」「AA端配置成功后定向触发」两层配置配合,就能实现仅允许AA任务完成后触发BB、禁止其他Jenkinsfile随意触发BB的需求。
一、BB任务侧配置:锁死触发入口,拦截非法请求
- 关闭所有默认自动触发规则:进入BB任务的配置页面,找到「构建触发器」板块,把所有默认开启的触发规则(包括定时构建、代码仓库变更触发、其他工程关联触发等)全部取消勾选。
- 配置项目级触发权限:在全局安全配置的项目权限板块,将BB任务的「触发构建」权限仅开放给管理员账号、以及AA任务运行时使用的Jenkins服务账号,收回其他普通用户、公共任务账号的触发权限。如果用了
Build Authorization Token Root插件,可以给BB单独配置一个仅管理员和AA任务维护者知晓的专用触发token,不要对外泄露。 - 加一层流水线级别的兜底校验:在BB的Jenkinsfile最开头加触发来源判断逻辑,就算有人绕开了前端权限配置,只要触发来源不是AA任务、也不是管理员手动操作,直接中止构建,参考代码如下:
pipeline { agent any stages { stage('触发来源合法性校验') { steps { script { def triggerCauses = currentBuild.getBuildCauses() def validTrigger = false triggerCauses.each { cause -> // 匹配AA任务作为上游触发的场景 if (cause._class == 'hudson.model.Cause$UpstreamCause' && cause.upstreamProject == 'AA') { validTrigger = true } // 如需保留管理员手动触发的能力就保留这段,不需要就删掉 if (cause._class == 'hudson.model.Cause$UserIdCause' && cause.userId == '你的管理员账号ID') { validTrigger = true } } if (!validTrigger) { error("非法触发来源,构建已终止:本任务仅允许AA任务执行完成后自动触发") } } } } // 后续追加BB任务原有的业务构建逻辑 } }
二、AA任务侧配置:执行成功后定向触发BB
在AA任务的Jenkinsfile中,把触发BB的逻辑加到执行成功的后置动作块里,保证只有AA所有步骤跑通之后才会拉起BB,参考代码如下:
pipeline { agent any // 此处保留AA任务原有的所有stages业务逻辑 post { success { // 触发BB任务,如有需要传递的参数可在parameters中配置 build job: 'BB', parameters: [], wait: false // 不需要等待BB执行结果就设为false,需要同步等待BB结果就设为true } } }
配置后验证
配置完成后可以做三类测试确认效果:
- 在其他任意任务的Jenkinsfile中写触发BB的逻辑,执行后要么被权限直接拦截,要么会被BB开头的校验逻辑中止,无法正常启动BB构建
- 手动触发AA任务,等AA所有步骤执行成功后,确认BB会被自动拉起正常执行
- 用非管理员账号直接在BB的Web页面点击构建,会提示无权限,无法启动构建
内容的提问来源于stack exchange,提问作者FattyK
相关产品推荐
相关产品推荐

