Jenkins
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com,私有化部署
在极狐GitLab 13.7 中移动至免费版。
Jenkins 是一个开源自动化服务器,支持构建、部署和自动化项目。
当您计划将 CI 从 Jenkins 迁移到 极狐GitLab CI/CD 时,您应该使用与极狐GitLab 的 Jenkins 集成,但需要一个过渡解决方案。或者您已经投入使用 Jenkins 插件,并选择继续使用 Jenkins 来构建您的应用程序。
此集成可以在更改推送到极狐GitLab 时触发 Jenkins 构建。
您不能使用此集成从 Jenkins 触发极狐GitLab CI/CD 流水线。相反,在 Jenkins 作业中使用 流水线触发器 API 端点,并使用 流水线触发器令牌 进行身份验证。
在配置 Jenkins 集成后,当您将代码推送到您的存储库或在极狐GitLab 中创建合并请求时,您会触发 Jenkins 中的构建。Jenkins 流水线状态显示在合并请求小部件和极狐GitLab 项目的主页上。
有关极狐GitLab 的 Jenkins 集成概述,请参阅 极狐GitLab 工作流程与 Jira 议题和 Jenkins 流水线。
要配置与极狐GitLab 的 Jenkins 集成:
- 授予 Jenkins 访问极狐GitLab 项目的权限。
- 配置 Jenkins 服务器。
- 配置 Jenkins 项目。
- 配置极狐GitLab 项目。
授予 Jenkins 访问极狐GitLab 项目的权限
-
创建个人、项目或群组访问令牌。
-
将访问令牌范围设置为 API。
-
复制访问令牌值以配置 Jenkins 服务器。
配置 Jenkins 服务器
安装并配置 Jenkins 插件以授权与极狐GitLab 的连接。
- 在 Jenkins 服务器上,选择 管理 Jenkins > 管理插件。
- 选择 可用 选项卡。搜索 gitlab-plugin 并选择它进行安装。有关其他安装插件的方法,请参阅 Jenkins GitLab 文档。
- 选择 管理 Jenkins > 系统设置。
- 在 GitLab 部分,选择 启用 '/project' 端点的身份验证。
- 选择 添加,然后选择 Jenkins 凭据提供程序。
- 选择 GitLab API 令牌 作为令牌类型。
- 在 API 令牌 中,粘贴您从极狐GitLab 复制的访问令牌值 并选择 添加。
- 在 GitLab 主机 URL 中输入极狐GitLab 服务器的 URL。
- 要测试连接,选择 测试连接。
配置 Jenkins 项目
设置您打算在其上运行构建的 Jenkins 项目。
- 在您的 Jenkins 实例上,选择 新建项目。
- 输入项目的名称。
- 选择 自由风格项目 或 流水线项目 并选择 确定。您应该选择自由风格项目,因为 Jenkins 插件会在极狐GitLab 上更新构建状态。在流水线项目中,您必须配置脚本以在极狐GitLab 上更新状态。
- 从下拉列表中选择您的极狐GitLab 连接。
- 选择 当更改推送到 GitLab 时构建。
- 选择以下复选框:
- 接受的合并请求事件
- 关闭的合并请求事件
- 指定如何将构建状态报告给极狐GitLab:
-
如果您创建了自由风格项目,在 构建后操作 部分,选择 将构建状态发布到极狐GitLab。
-
如果您创建了流水线项目,您必须使用 Jenkins 流水线脚本在极狐GitLab 上更新状态。
示例 Jenkins 流水线脚本:
groovy1pipeline { 2 agent any 3 4 stages { 5 stage('gitlab') { 6 steps { 7 echo 'Notify GitLab' 8 updateGitlabCommitStatus name: 'build', state: 'pending' 9 updateGitlabCommitStatus name: 'build', state: 'success' 10 } 11 } 12 } 13}
-
配置极狐GitLab 项目
通过以下方式之一配置与 Jenkins 的极狐GitLab 集成。
使用 Jenkins 服务器 URL
如果您可以向极狐GitLab 提供您的 Jenkins 服务器 URL 和身份验证信息,则应使用此方法进行 Jenkins 集成。
- 在左侧边栏,选择 搜索或前往 并找到您的项目。
- 选择 设置 > 集成。
- 选择 Jenkins。
- 选择 激活 复选框。
- 选择您希望极狐GitLab 触发 Jenkins 构建的事件:
- 推送
- 合并请求
- 标签推送
- 输入 Jenkins 服务器 URL。
- 可选。清除 启用 SSL 验证 复选框以禁用 SSL 验证。
- 输入 项目名称。项目名称应为 URL 友好的,其中空格用下划线替换。为确保项目名称有效,请在查看 Jenkins 项目时从浏览器的地址栏中复制它。
- 如果您的 Jenkins 服务器需要身份验证,请输入 用户名 和 密码。
- 可选。选择 测试设置。
- 选择 保存更改。
使用 webhook
如果您无法 向极狐GitLab 提供您的 Jenkins 服务器 URL 和身份验证信息,可以配置 webhook 以集成极狐GitLab 和 Jenkins。
- 在 Jenkins 作业的配置中,在极狐GitLab 配置部分,选择 高级。
- 在 密钥令牌 下,选择 生成。
- 复制令牌,并保存作业配置。
- 在极狐GitLab:
- 为您的项目创建 webhook。
- 输入触发 URL(例如 https://JENKINS_URL/project/YOUR_JOB)。
- 在 密钥令牌 中粘贴令牌。
- 要测试 webhook,选择 测试。
故障排除
错误:Connection failed. Please check your settings
当您配置极狐GitLab 时,您可能会收到一条错误信息,指出 Connection failed. Please check your settings。
此问题可能有多个原因和解决方案:
| 原因 | 解决办法 |
|---|---|
| 极狐GitLab 无法在该地址访问您的 Jenkins 实例。 | 对于极狐GitLab 私有化部署,ping 在极狐GitLab 实例上提供的域的 Jenkins 实例。 |
| Jenkins 实例位于本地地址,并且未包含在 极狐GitLab 安装的允许列表 中。 | 将实例添加到极狐GitLab 安装的允许列表中。 |
| Jenkins 实例的凭据没有足够的访问权限或无效。 | 授予凭据足够的访问权限或创建有效凭据。 |
| 您在 Jenkins 插件配置 中未选择 Enable authentication for /project end-point 复选框。 | 选择该复选框。 |
错误:Could not connect to the CI server
如果极狐GitLab 没有通过 Commit Status API 从 Jenkins 收到构建状态更新,您可能会在合并请求中收到一条错误信息,指出 Could not connect to the CI server。
当 Jenkins 配置不正确或通过 API 报告状态时出现错误时,会发生此问题。
要解决此问题:
- 配置 Jenkins 服务器 以便访问极狐GitLab API。
- 配置 Jenkins 项目,并确保如果您创建了自由风格项目,您选择了“Publish build status to GitLab”后构建操作。
合并请求事件未触发 Jenkins 流水线
当请求超过 webhook 超时限制(默认设置为 10 秒)时,可能会发生此问题。
对于此问题,请检查:
-
集成 webhook 日志中的请求失败情况。
-
/var/log/gitlab/gitlab-rails/production.log 中的消息,如:
plaintextWebHook Error => Net::ReadTimeout或
plaintextWebHook Error => execution expired
在极狐GitLab 私有化部署中,您可以通过 增加 webhook 超时值 来解决此问题。
在 Jenkins 中启用作业日志
要排查集成问题,您可以在 Jenkins 中启用作业日志以获取有关构建的更多详细信息。
要在 Jenkins 中启用作业日志:
- 转到 仪表盘 > 管理 Jenkins > 系统日志。
- 选择 添加新的日志记录器。
- 输入日志记录器的名称。
- 在下一个屏幕中,选择 添加 并输入 com.dabsquared.gitlabjenkins。
- 确保日志级别为 全部 并选择 保存。
要查看您的日志:
- 运行构建。
- 转到 仪表盘 > 管理 Jenkins > 系统日志。
- 选择您的日志记录器并检查日志。