Help us learn about your current experience with the documentation. Take the survey.

Jenkins

  • Tier: 免费版、高级版、旗舰版
  • Offering: GitLab.com、GitLab 自托管、GitLab 专用

Jenkins 是一个开源的自动化服务器,支持构建、部署和自动化项目。

当您应该使用 Jenkins 与 GitLab 的集成时:

  • 您计划将来将 CI 从 Jenkins 迁移到 GitLab CI/CD,但需要一个临时解决方案。
  • 您已经投入了 Jenkins 插件 的资源,并选择继续使用 Jenkins 来构建您的应用程序。

当有变更推送到 GitLab 时,此集成可以触发 Jenkins 构建。

您不能使用此集成从 Jenkins 触发 GitLab CI/CD 管道。相反,请在 Jenkins 作业中使用 pipeline triggers API 端点,并通过 pipeline trigger token 进行身份验证。

配置 Jenkins 集成后,当您将代码推送到仓库或在 GitLab 中创建合并请求时,您将在 Jenkins 中触发构建。Jenkins 管道状态将显示在合并请求小部件和 GitLab 项目的首页上。

有关 GitLab Jenkins 集成的概述,请参阅 使用 Jira 问题和工作流的 GitLab 与 Jenkins 集成

要配置 Jenkins 与 GitLab 的集成:

  • 授予 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 到 GitLab 的身份验证

配置 Jenkins 项目

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

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

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

      示例 Jenkins Pipeline 脚本:

      pipeline {
         agent any
      
         stages {
            stage('gitlab') {
               steps {
                  echo '通知 GitLab'
                  updateGitlabCommitStatus name: 'build', state: 'pending'
                  updateGitlabCommitStatus name: 'build', state: 'success'
               }
            }
         }
      }

      有关更多 Jenkins Pipeline 脚本示例,请参阅 GitHub 上的 Jenkins GitLab 插件仓库

配置 GitLab 项目

通过以下一种方式配置 GitLab 与 Jenkins 的集成。

使用 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,请选择 测试

相关主题

故障排除

错误:连接失败。请检查您的设置

当您配置 GitLab 时,您可能会收到一条错误消息,显示 连接失败。请检查您的设置

此问题有多种可能的原因和解决方案:

原因 解决方案
GitLab 无法在指定地址访问您的 Jenkins 实例。 对于 GitLab 自托管,请在 GitLab 实例上提供的域中 ping Jenkins 实例。
Jenkins 实例位于本地地址,并且未包含在 GitLab 安装的允许列表 中。 将实例添加到 GitLab 安装的允许列表中。
Jenkins 实例的凭据没有足够的访问权限或无效。 授予凭据足够的访问权限或创建有效的凭据。
在您的 Jenkins 插件配置 中,未选择 为 ‘/project’ 端点启用身份验证 复选框 选择该复选框。

错误:无法连接到 CI 服务器

如果 GitLab 未通过 Commit Status API 收到来自 Jenkins 的构建状态更新,您可能会在合并请求中收到一条错误消息,显示 无法连接到 CI 服务器

当 Jenkins 配置不正确或通过 API 报告状态时出错,会发生此问题。

要解决此问题:

  1. 配置 Jenkins 服务器 以访问 GitLab API。
  2. 配置 Jenkins 项目,并确保 如果您创建自由风格项目,请选择 “将构建状态发布到 GitLab” 构建后操作。

合并请求事件未触发 Jenkins 管道

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

对于此问题,请检查:

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

  • /var/log/gitlab/gitlab-rails/production.log 中是否有类似以下的消息:

    WebHook 错误 => Net::ReadTimeout

    WebHook 错误 => 执行已过期

在 GitLab 自托管上,您可以通过 增加 webhook 超时值 来解决此问题。

在 Jenkins 中启用作业日志

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

要在 Jenkins 中启用作业日志:

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

要查看您的日志:

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