Jenkins Webhook 配置指南
本文档旨在帮助用户配置 Jenkins Webhook,以便在 GitLab 推送代码时触发 Jenkins 构建,同时解决常见的 403 No valid crumb was included in the request 错误。
1. 安装必要的插件
确保你的 Jenkins 安装了 "Generic Webhook Trigger" 插件。如果没有安装,可以通过 Jenkins 的插件管理页面进行安装。
2. 配置 Jenkins 作业
打开 Jenkins 作业配置页面:
导航到你想要触发构建的 Jenkins 作业。
在作业的配置页面中,找到 "构建触发器" 部分。
设置触发器:
勾选 "触发远程构建 (例如, 使用脚本)" 选项。
在 "身份验证令牌" 字段中输入一个令牌(例如 my_secret_token)。这个令牌将用于验证 Webhook 请求。
3. 生成 Webhook URL
配置完成后,你的 Webhook URL 将类似于以下格式:
http://<jenkins_url>/job/<job_name>/build?token=<your_token>
例如:
http://jenkins.example.com/job/my_job/build?token=my_secret_token
4. 配置 GitLab Webhook
登录到你的 GitLab 项目:
导航到项目的 Settings -> Webhooks。
添加 Webhook:
输入 Jenkins Webhook URL。
选择触发事件,例如 Push events。
保存 Webhook。
5. 配置 .gitlab-ci.yml 文件
在你的 GitLab 项目中,创建或编辑 .gitlab-ci.yml 文件。以下是一个示例配置,它会在每次推送代码时触发 Jenkins 构建:
stages:
- trigger_jenkins
trigger_jenkins:
stage: trigger_jenkins
script:
- CRUMB=$(curl -u "jenkins_username:jenkins_password" -s "http://jenkins_url/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)")
- curl -X POST -u "jenkins_username:jenkins_password" -H "$CRUMB" "http://jenkins_url/job/job_name/buildWithParameters?token=jenkins_token&BRANCH_NAME=$CI_COMMIT_REF_NAME"
only:
- branches
6. 解决 403 No valid crumb was included in the request 错误
6.1 全局配置
登录到 Jenkins 管理界面:
导航到 Manage Jenkins -> Configure Global Security。
配置 CSRF 保护:
在 CSRF Protection 部分,勾选 Enable proxy compatibility 选项。
保存配置。
6.2 获取 Crumb
使用以下命令获取 crumb:
CRUMB=$(curl -u "jenkins_username:jenkins_password" -s "http://jenkins_url/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)")
6.3 在 Webhook 请求中包含 Crumb
使用以下命令发送包含 crumb 的 Webhook 请求:
curl -X POST -u "jenkins_username:jenkins_password" -H "$CRUMB" "http://jenkins_url/job/job_name/buildWithParameters?token=jenkins_token&BRANCH_NAME=$CI_COMMIT_REF_NAME"
7. 测试 Webhook
使用 curl 命令或其他工具来测试 Webhook URL 是否有效:
curl -X POST http://jenkins.example.com/job/my_job/build?token=my_secret_token
8. 检查权限
确保用于触发构建的用户具有足够的权限来执行构建操作。
通过以上步骤,你应该能够成功配置 Jenkins Webhook,并解决 403 No valid crumb was included in the request 错误。如果问题仍然存在,请考虑在 Jenkins 社区论坛或相关技术支持渠道寻求帮助。
Comments