如何在Jenkins脚本及Jenkinsfile中配置认证令牌实现远程构建触发?
Jenkins 远程触发构建的认证令牌配置(脚本方式)
1. 在Jenkinsfile中使用认证令牌触发构建
Jenkinsfile主要用于定义流水线执行逻辑,若要实现远程触发或在流水线内触发其他任务,分两种场景处理:
- 远程触发当前流水线:当前流水线需先完成远程触发的配置(见第二部分),之后通过带令牌的URL直接触发:
http://<jenkins地址>/job/<任务名>/build?token=<你的令牌值>,Jenkinsfile本身无需额外嵌入令牌。 - 在流水线内触发其他已配置令牌的任务:可通过两种方式实现:
// 方式1:使用Jenkins内置build步骤(需确保当前流水线有目标任务的触发权限) build job: '目标任务名称', token: '目标任务的令牌', parameters: [ [$class: 'StringParameterValue', name: 'PARAM_NAME', value: '参数值'] ] // 方式2:通过shell脚本调用curl触发 sh ''' curl -X POST "http://jenkins地址/job/目标任务名称/build?token=目标任务的令牌" '''
2. 通过Jenkins脚本设置认证令牌
可使用Groovy脚本在Jenkins脚本控制台(系统管理→脚本控制台)或流水线中执行,完成任务的远程触发令牌配置:
单个任务配置
// 定位目标任务 def targetJob = Jenkins.instance.getItemByFullName('你的任务名称') // 获取任务的触发器配置集合 def triggers = targetJob.getTriggers() // 实例化远程触发器并设置令牌 def remoteTrigger = new hudson.triggers.RemoteTrigger('自定义的认证令牌') triggers.put(hudson.triggers.RemoteTrigger.class, remoteTrigger) // 保存任务配置 targetJob.save() println "已为任务 ${targetJob.name} 设置远程触发令牌"
批量配置多个任务
如果需要给一批任务统一设置令牌,可遍历任务列表处理:
def jobList = ['任务A', '任务B', '任务C'] def unifiedToken = '统一的认证令牌' jobList.each { jobName -> def job = Jenkins.instance.getItemByFullName(jobName) if (job) { def triggers = job.getTriggers() triggers.put(hudson.triggers.RemoteTrigger.class, new hudson.triggers.RemoteTrigger(unifiedToken)) job.save() println "已完成任务 ${jobName} 的令牌配置" } else { println "未找到任务 ${jobName}" } }
注意事项
- 执行脚本需要Jenkins管理员权限,因为涉及修改任务核心配置
- 令牌建议使用随机复杂字符串,降低未授权触发风险
- 配置修改后自动生效,无需重启Jenkins服务
内容的提问来源于stack exchange,提问作者olep
相关产品推荐
相关产品推荐

