从另一个Jenkins任务触发Sonar任务时鉴权失败如何解决?
报错原因
当前API请求未携带身份认证信息,被Jenkins识别为匿名用户访问,而匿名用户缺少Jenkins全局Read权限及目标任务的构建权限,因此触发拦截。
解决步骤
- 优先使用Jenkins内置任务触发逻辑:如果是在第一个Jenkins任务的流水线中调用第二个Sonar任务,无需手动调用HTTP API,直接使用内置
build步骤即可,该步骤会自动复用当前任务的执行身份完成认证,无需额外配置API Token,示例用法:build job: 'DPNew/xyz', parameters: [ string(name: 'FROM_HASH', value: '195c8df91791768f3098ce260eb2dd8728'), string(name: 'REPO_NAME', value: '_python'), string(name: 'PROJECT_KEY', value: '~abc'), string(name: 'EMAIL', value: 'abc@gmail.com'), string(name: 'FROM_BRANCH_NAME', value: 'feature/DO-451'), string(name: 'TO_BRANCH_NAME', value: 'Port-2.7'), string(name: 'PR_ID', value: '622') ], wait: false // 不需要等待第二个任务执行完成可设为false,需要同步等待执行结果则设为true - 若必须手动调用API,需要在请求中携带身份认证信息,有两种实现方式:
- 把用户名和API Token拼接在URL前缀中,修改后的请求格式如下,需替换为你自己的Jenkins用户名和生成的API Token:
https://<Jenkins用户名>:<API Token>@jenkins.com/job/DPNew/job/xyz/buildWithParameters?token=DW&FROM_HASH=195c8df91791768f3098ce260eb2dd8728&REPO_NAME=_python&PROJECT_KEY=%7Eabc&EMAIL=abc@gmail.com&FROM_BRANCH_NAME=feature%2FDO-451&TO_BRANCH_NAME=Port-2.7&PR_ID=622 - 在请求头中携带Basic认证信息,将
用户名:API Token的字符串做Base64编码后,添加如下请求头即可,该方式安全性更高,推荐在脚本中使用:Authorization: Basic <Base64编码后的字符串>
- 把用户名和API Token拼接在URL前缀中,修改后的请求格式如下,需替换为你自己的Jenkins用户名和生成的API Token:
- 权限校验:确认你使用的Jenkins账号已分配全局Read权限,以及目标任务
DPNew/xyz的构建权限,避免权限不足导致调用失败。 - 回写逻辑校验:确认Sonar任务执行完成后,已配置将报告地址和结果回写到Bitbucket对应PR的逻辑,保证Bitbucket UI可以正常展示构建结果和Sonar报告入口。
内容的提问来源于stack exchange,提问作者Abhishek Patil
相关产品推荐
相关产品推荐

