GitHub Actions触发Jenkins构建时出现错误求助
解决GitHub Actions触发Jenkins构建的401/404错误
针对你遇到的GitHub Actions返回401未授权、本地curl返回404找不到的问题,按以下步骤排查解决:
先搞定本地404问题
本地curl请求返回404,核心原因是Jenkins Job的路径或名称不对:
- 登录Jenkins控制台,确认
subbu_project这个Job确实存在,名称完全匹配(Jenkins对Job名称大小写敏感,注意空格或特殊字符) - 如果Job在文件夹下,URL要改成
/job/文件夹名/job/subbu_project/build格式,比如Job在dev文件夹里,完整路径就是http://192.168.241.134:8080/job/dev/job/subbu_project/build - 直接在浏览器访问
http://192.168.241.134:8080/job/subbu_project/,能打开说明路径正确,打不开就是名称或层级错了
修复GitHub Actions的401未授权错误
401问题主要出在权限验证或CSRF保护上,按下面的方法调整:
1. 确认API Token正确
- 登录Jenkins,点击右上角用户名→「设置」,重新生成API Token,把新生成的Token更新到GitHub仓库的
JENKINS_API_TOKENSecrets里,注意不要复制错字符 - 划重点:Jenkins的API Token不是你的登录密码,是专门生成的令牌,别搞混了
2. 加上CSRF Crumb头
新版本Jenkins默认启用CSRF保护,POST请求必须带Crumb才能通过验证。修改trigger_build.yml中的执行脚本:
# 处理Jenkins URL末尾的斜杠 TRIMMED_JENKINS_URL=$(echo "$JENKINS_URL" | sed 's:/*$::') # 构建Job路径 CLEAN_JOB_NAME="$JOB_NAME" # 获取CSRF Crumb CRUMB=$(curl -s "$TRIMMED_JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)" --user "$JENKINS_USER:$JENKINS_API_TOKEN") # 拼接完整触发URL FULL_URL="${TRIMMED_JENKINS_URL}/job/${CLEAN_JOB_NAME}/build" echo "Full URL: $FULL_URL" # 带Crumb触发构建 curl -v "$FULL_URL" \ --user "$JENKINS_USER:$JENKINS_API_TOKEN" \ --header "$CRUMB" \ --header "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "BUILD_NUMBER=$BUILD_NUMBER" \ --data-urlencode "DEPLOY_ENVIRONMENT=$DEPLOY_ENVIRONMENT"
3. 检查用户权限
确保Jenkins用户subbaramaiah_chevuru拥有subbu_project这个Job的Build权限:进入Job的「配置」页面,找到权限设置部分,确认该用户有触发构建的权限
验证Runner与Jenkins的连通性
- 在自托管Runner所在的WSL环境里,执行
curl http://192.168.241.134:8080,确认能正常返回Jenkins首页内容 - 如果之前用
localhost访问,检查Jenkins是否绑定了0.0.0.0:修改Jenkins配置文件jenkins.xml,把--httpListenAddress的值改成0.0.0.0,确保WSL能访问到Jenkins服务
额外注意点
- GitHub Secrets里的
JENKINS_URL要设为http://192.168.241.134:8080,别用localhost——因为WSL的localhost指向自身,不是宿主机的Jenkins - 本地测试curl时,Crumb是临时的,每次请求都要重新获取,别用过期的Crumb值
内容的提问来源于stack exchange,提问作者SUBARAM RAM
相关产品推荐
相关产品推荐

