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 项目的权限#

  1. 创建个人、项目或群组访问令牌。

  2. 将访问令牌范围设置为 API

  3. 复制访问令牌值以配置 Jenkins 服务器。

配置 Jenkins 服务器#

安装并配置 Jenkins 插件以授权与极狐GitLab 的连接。

  1. 在 Jenkins 服务器上,选择 管理 Jenkins > 管理插件
  2. 选择 可用 选项卡。搜索 gitlab-plugin 并选择它进行安装。有关其他安装插件的方法,请参阅 Jenkins GitLab 文档
  3. 选择 管理 Jenkins > 系统设置
  4. GitLab 部分,选择 启用 '/project' 端点的身份验证
  5. 选择 添加,然后选择 Jenkins 凭据提供程序
  6. 选择 GitLab API 令牌 作为令牌类型。
  7. API 令牌 中,粘贴您从极狐GitLab 复制的访问令牌值 并选择 添加
  8. GitLab 主机 URL 中输入极狐GitLab 服务器的 URL。
  9. 要测试连接,选择 测试连接

配置 Jenkins 项目#

设置您打算在其上运行构建的 Jenkins 项目。

  1. 在您的 Jenkins 实例上,选择 新建项目
  2. 输入项目的名称。
  3. 选择 自由风格项目流水线项目 并选择 确定。您应该选择自由风格项目,因为 Jenkins 插件会在极狐GitLab 上更新构建状态。在流水线项目中,您必须配置脚本以在极狐GitLab 上更新状态。
  4. 从下拉列表中选择您的极狐GitLab 连接。
  5. 选择 当更改推送到 GitLab 时构建
  6. 选择以下复选框:
    • 接受的合并请求事件
    • 关闭的合并请求事件
  7. 指定如何将构建状态报告给极狐GitLab:
    • 如果您创建了自由风格项目,在 构建后操作 部分,选择 将构建状态发布到极狐GitLab

    • 如果您创建了流水线项目,您必须使用 Jenkins 流水线脚本在极狐GitLab 上更新状态。

      示例 Jenkins 流水线脚本:

      groovy
      1pipeline { 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 集成。

  1. 在左侧边栏,选择 搜索或前往 并找到您的项目。
  2. 选择 设置 > 集成
  3. 选择 Jenkins
  4. 选择 激活 复选框。
  5. 选择您希望极狐GitLab 触发 Jenkins 构建的事件:
    • 推送
    • 合并请求
    • 标签推送
  6. 输入 Jenkins 服务器 URL
  7. 可选。清除 启用 SSL 验证 复选框以禁用 SSL 验证
  8. 输入 项目名称。项目名称应为 URL 友好的,其中空格用下划线替换。为确保项目名称有效,请在查看 Jenkins 项目时从浏览器的地址栏中复制它。
  9. 如果您的 Jenkins 服务器需要身份验证,请输入 用户名密码
  10. 可选。选择 测试设置
  11. 选择 保存更改

使用 webhook#

如果您无法 向极狐GitLab 提供您的 Jenkins 服务器 URL 和身份验证信息,可以配置 webhook 以集成极狐GitLab 和 Jenkins。

  1. 在 Jenkins 作业的配置中,在极狐GitLab 配置部分,选择 高级
  2. 密钥令牌 下,选择 生成
  3. 复制令牌,并保存作业配置。
  4. 在极狐GitLab:
  5. 要测试 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 报告状态时出现错误时,会发生此问题。

要解决此问题:

  1. 配置 Jenkins 服务器 以便访问极狐GitLab API。
  2. 配置 Jenkins 项目,并确保如果您创建了自由风格项目,您选择了“Publish build status to GitLab”后构建操作。

合并请求事件未触发 Jenkins 流水线#

当请求超过 webhook 超时限制(默认设置为 10 秒)时,可能会发生此问题。

对于此问题,请检查:

  • 集成 webhook 日志中的请求失败情况。

  • /var/log/gitlab/gitlab-rails/production.log 中的消息,如:

    plaintext
    WebHook Error => Net::ReadTimeout

    plaintext
    WebHook Error => execution expired

在极狐GitLab 私有化部署中,您可以通过 增加 webhook 超时值 来解决此问题。

在 Jenkins 中启用作业日志#

要排查集成问题,您可以在 Jenkins 中启用作业日志以获取有关构建的更多详细信息。

要在 Jenkins 中启用作业日志:

  1. 转到 仪表盘 > 管理 Jenkins > 系统日志
  2. 选择 添加新的日志记录器
  3. 输入日志记录器的名称。
  4. 在下一个屏幕中,选择 添加 并输入 com.dabsquared.gitlabjenkins
  5. 确保日志级别为 全部 并选择 保存

要查看您的日志:

  1. 运行构建。
  2. 转到 仪表盘 > 管理 Jenkins > 系统日志
  3. 选择您的日志记录器并检查日志。