关于jenkins和gitlab的集成操作

GitLab 与 Jenkins 集成的核心是:GitLab 生成 API Token + Jenkins 安装 GitLab 插件并配置全局连接 + GitLab 配置 Webhook 触发 Jenkins 构建,最终实现代码提交自动触发 CI/CD 全流程。

一、环境准备

  • 已部署并可访问的 GitLab 服务(HTTP/HTTPS)
  • 已部署并可访问的 Jenkins 服务(推荐 2.300+)
  • 网络互通:GitLab 能访问 Jenkins 端口(默认 8080),Jenkins 能访问 GitLab 端口(默认 80/443)
  • Jenkins 已安装:Git、GitLab Plugin、Pipeline(按需)

二、GitLab 侧配置(生成凭证 + 允许 Webhook)

1. 生成 GitLab API 访问令牌(用于 Jenkins 认证)
  1. 登录 GitLab → 右上角头像 → Edit Profile → Access Tokens
  2. 填写:
    • Namejenkins-gitlab-integration
    • Expires at:按需设置(建议长期)
    • Scopes :勾选 api (必须)、read_repositorywrite_repository
  3. 点击 Create personal access token复制生成的 Token(仅显示一次,妥善保存)
2. 允许 GitLab 向本地网络发送 Webhook(内网环境必做)
  1. GitLab 管理员账号 → Admin Area → Settings → Network → Outbound requests
  2. 勾选:Allow requests to the local network from webhooks and integrations
  3. 保存

三、Jenkins 侧全局配置(连接 GitLab)

1. 安装 GitLab 插件
  1. Jenkins → Manage Jenkins → Manage Plugins → Available
  2. 搜索:GitLab PluginGit Plugin → 安装并重启 Jenkins
2. 配置 GitLab 全局连接
  1. Manage Jenkins → Configure System → GitLab
  2. 点击 Add GitLab Server
    • Name :自定义(如 GitLab-Internal
    • GitLab host URLhttp://gitlab.example.com(你的 GitLab 地址)
    • Credentials :点击 Add → Jenkins
      • KindGitLab API token
      • API Token:粘贴 GitLab 生成的 Token
      • IDgitlab-api-token(自定义)
      • 保存
    • 勾选:Enable authentication for '/project' end-point
  3. 点击 Test Connection → 显示 Success 即连通
  4. 保存系统配置
3. 配置 GitLab 代码拉取凭证(二选一)
  • 方式 1:SSH 密钥(推荐)
    1. Jenkins 服务器生成密钥:ssh-keygen -t ed25519
    2. 公钥添加到 GitLab:用户设置 → SSH Keys
    3. Jenkins → Manage Jenkins → Manage Credentials → 全局
      • Add Credentials :Kind = SSH Username with private key
      • Usernamegit
      • Private Key:粘贴 Jenkins 服务器私钥
      • ID:gitlab-ssh
  • 方式 2:用户名密码 / Token
    • Kind = Username with password
    • Username:GitLab 用户名
    • Password:GitLab 访问 Token

四、创建 Jenkins 任务(自由风格 / Pipeline)

方案 A:自由风格项目(快速上手)
  1. New Item → 输入名称 → 选择 Freestyle project → OK
  2. 源码管理
    • Git
    • Repository URL :GitLab 项目地址(http://gitlab.example.com/group/project.gitgit@gitlab.example.com:group/project.git
    • Credentials:选择上面配置的 SSH / 用户名密码凭证
  3. 构建触发器
    • 勾选:Build when a change is pushed to GitLab
    • 复制生成的 Webhook URL (如 http://jenkins:8080/project/your-job
    • 点击 Generate 生成 Secret token → 复制
  4. 构建步骤 :按需添加(如 echo "Build success"mvn clean packagedocker build 等)
  5. 保存任务
方案 B:Pipeline 项目(推荐企业级)
  1. New Item → 名称 → Pipeline → OK
  2. Pipeline → 选择 Pipeline script from SCM
    • SCM:Git
    • 填写 GitLab 仓库地址 + 凭证
    • 脚本路径:Jenkinsfile(项目根目录)
  3. 构建触发器:同自由风格,勾选 GitLab 触发并复制 Webhook URL + Secret token
  4. 保存

五、GitLab 配置 Webhook(触发 Jenkins)

  1. 进入 GitLab 项目 → Settings → Webhooks
  2. 填写:
    • URL :粘贴 Jenkins 任务生成的 Webhook URL
    • Secret token :粘贴 Jenkins 生成的 Secret token
    • Trigger :勾选 Push events (代码推送触发)、Merge request events(合并请求触发)
  3. 取消勾选 Enable SSL verification(内网自签证书环境)
  4. 点击 Add webhook
  5. 测试:点击 Test → Push events → 返回 200 OK 即成功

六、编写 Jenkinsfile(Pipeline 示例)

在 GitLab 项目根目录创建 Jenkinsfile,定义 CI/CD stages:

groovy

复制代码
pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                git url: 'http://gitlab.example.com/group/project.git',
                    credentialsId: 'gitlab-ssh',
                    branch: 'main'
            }
        }
        stage('构建') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }
        stage('测试') {
            steps {
                sh 'mvn test'
            }
        }
        stage('部署') {
            steps {
                // 示例:上传到服务器 / 部署到 K8s / 推送镜像
                sh 'echo "Deploying to production..."'
            }
        }
    }
    post {
        success {
            echo 'CI/CD 流程执行成功!'
        }
        failure {
            echo 'CI/CD 流程执行失败!'
        }
    }
}

七、完整 CI/CD 流程

  1. 开发者提交代码到 GitLab
  2. GitLab 发送 Webhook 到 Jenkins
  3. Jenkins 自动拉取最新代码
  4. 执行 Jenkinsfile 定义的:构建 → 测试 → 部署
  5. 构建结果自动回写到 GitLab(Merge Request 可见构建状态)

八、常见问题排查

  1. Webhook 测试失败(403/500)
    • 检查 Jenkins 地址是否可从 GitLab 访问
    • 确认 Secret token 一致
    • 检查 GitLab 出站请求是否允许本地网络
  2. Jenkins 拉取代码失败
    • 检查 GitLab 仓库地址与凭证是否正确
    • 确认 Jenkins 服务器能解析 GitLab 域名
  3. 构建状态未同步到 GitLab
    • 确认 GitLab Token 包含 api 权限
    • 检查 Jenkins 全局 GitLab 配置是否正确

九、进阶优化

  • 结合 SonarQube 做代码质量检测
  • 结合 Nexus/Harbor 管理制品与镜像
  • 多环境部署(dev/test/prod)通过分支 / 标签区分
  • 构建结果通知(邮件、钉钉、企业微信)
相关推荐
kjmkq3 小时前
适合卫星物联网的存储模块 天硕(TOPSSD)为万物互联的太空网络提供存储支撑
网络·物联网·servlet
DianSan_ERP13 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
小道仙9714 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest
vx_Biye_Design15 天前
【关注可免费领取源码】云计算及其应用网络教学系统--毕设附源码35183
java·spring·spring cloud·servlet·eclipse·云计算·课程设计
啊哈哈哈哈哈啊哈哈17 天前
Spring MVC 项目结构学习笔记
java·spring boot·spring·servlet·maven
百锦再17 天前
Jenkins 全面精通指南:从入门到脚本大师
运维·后端·python·servlet·django·flask·jenkins
隔壁老王的代码17 天前
Jenkins的流水线详解
运维·servlet·jenkins
衍生星球17 天前
【JSP程序设计】Servlet对象 — page对象
java·开发语言·servlet·jsp·jsp程序设计
二哈喇子!17 天前
Servlet 开发技术
servlet