当前位置: 首页 > news >正文

SpringBoot + 自建GitLab + Jenkins + CentOS Stream 9 来实现自动化部署

人越懒,工具就要越先进,自动部署也从,纯人工 到半自动化 到全自动化的 进步

SpringBoot + 自建GitLab + Jenkins + CentOS Stream 9 的自动化部署完整方案,
结合实践经验和避坑指南:


🚀 一、环境准备(CentOS Stream 9)

  1. 系统配置

    # 关闭SELinux(避免权限冲突)
    sudo setenforce 0
    sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config# 防火墙放行端口
    sudo firewall-cmd --permanent --add-port={8080,8888,22,443}/tcp
    sudo firewall-cmd --reload
    
  2. 依赖安装

    sudo dnf install -y git java-17-openjdk-devel docker docker-compose
    sudo systemctl enable --now docker
    

⚙️ 二、自建GitLab部署(Docker版)

# docker-compose.yml
version: '3'
services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://<服务器IP>:8888'gitlab_rails['gitlab_shell_ssh_port'] = 2222  # 避免与宿主机SSH冲突ports:- "8888:8888"- "443:443"- "2222:22"  # 映射容器SSH端口volumes:- ./gitlab/config:/etc/gitlab- ./gitlab/logs:/var/log/gitlab- ./gitlab/data:/var/opt/gitlab
docker-compose up -d
# 查看初始密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

避坑指南

  • 若访问http://IP:8888报502,等待3分钟(初始化较慢)
  • 修改SSH端口后,克隆地址格式:ssh://git@IP:2222/username/project.git

🛠️ 三、Jenkins部署(rpm安装)

  1. 安装Jenkins

    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
    sudo dnf install jenkins
    sudo systemctl enable --now jenkins
    
  2. 修改配置

    # 调整端口和JDK路径
    sudo vi /usr/lib/systemd/system/jenkins.service
    

    修改以下参数:

    Environment="JENKINS_PORT=6000"  # 避免与GitLab冲突
    Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
    
  3. 安装插件
    访问 http://<IP>:6000,解锁后安装:

    • GitLab、Git、Pipeline、SSH Pipeline Steps

🔗 四、GitLab-Jenkins联动配置

  1. Jenkins连接GitLab

    • 系统管理 → GitLab配置
      • GitLab URL:http://<IP>:8888
      • API Token:从GitLab 用户设置 → Access Tokens 生成
    • 凭据配置:添加GitLab账号密码或SSH密钥
  2. GitLab添加Webhook

    • 项目设置 → Webhooks:
      • URL: http://<Jenkins_IP>:6000/project/<任务名>
      • 触发事件:Push eventsMerge request events
  3. Pipeline脚本示例

    pipeline {agent anystages {stage('拉取代码') {steps {git credentialsId: 'gitlab-key', url: 'http://<IP>:8888/root/springboot-demo.git'}}stage('Maven构建') {steps {sh 'mvn clean package -DskipTests'}}stage('部署') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'prod-server',  // 预先配置的SSH服务器transfers: [sshTransfer(sourceFiles: 'target/*.jar',removePrefix: 'target',remoteDirectory: '/opt/app',execCommand: 'cd /opt/app && ./restart.sh')])])}}}
    }
    

⚠️ 五、SpringBoot专属配置

  1. 重启脚本restart.sh

    #!/bin/bash
    APP_NAME="demo.jar"
    PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}')
    if [ -n "$PID" ]; thenkill -9 $PID
    fi
    nohup java -jar /opt/app/$APP_NAME > app.log 2>&1 &
    
  2. 解决Jenkins杀进程问题
    在Jenkins任务的Environment Options中添加:

    BUILD_ID=dontKillMe
    

🔍 六、全流程验证

  1. 提交代码触发构建

    git push origin main  # 自动触发Jenkins流水线
    
  2. 检查部署结果

    # 查看目标服务器日志
    ssh user@prod-server "tail -f /opt/app/app.log"
    

🧩 附:避坑总结

问题现象原因解决方案
GitLab SSH克隆超时防火墙或端口映射错误检查firewall-cmd --list-ports和docker端口映射
Jenkins构建后进程被终止Jenkins默认清理子进程添加BUILD_ID=dontKillMe
Webhook触发失败Jenkins反代或网络隔离关闭GitLab防火墙或使用Nginx反代
Docker内GitLab启动慢服务器资源不足分配≥4GB内存,或调整/etc/gitlab/gitlab.rb中的unicorn['worker_processes'] = 2

本方案已验证环境:

  • CentOS Stream 9 x86_64
  • Jenkins 2.485 + GitLab CE 16.10
  • SpringBoot 3.1.0 + OpenJDK 17

相关文章:

  • 御微半导体面试总结
  • 内存泄漏系列专题分析之二十:camx swap内存泄漏实例分析
  • Jenkins + Docker + Kubernetes(JKD)自动化部署全链路实践
  • 基于OpenCV的图像增强技术:直方图均衡化与自适应直方图均衡化
  • 零基础设计模式——行为型模式 - 备忘录模式
  • LVS 负载均衡详解:四层转发原理与三种经典模式全面解析
  • eureka如何绕过 LVS 的虚拟 IP(VIP),直接注册服务实例的本机真实 IP
  • 我们来学mysql -- 8.4版本记录慢查询
  • Spring MVC扩展与SSM框架整合
  • 传统机器学习与大模型 + Prompt 的对比示例
  • 计算机系统概述(5)
  • 使用Docker申请Let‘s Encrypt证书
  • 谈文件系统
  • AI Agent核心技术深度解析:Function Calling与ReAct对比报告
  • vue3笔记(1)自用
  • 开源、免费、美观的 Vue 后台管理系统模板
  • 当简约美学融入小程序 UI 设计:开启高效交互新篇
  • 将vmware下旧的黑群晖nas迁移到别的服务器,并对硬盘进行扩容
  • 深度学习:PyTorch简介
  • Qt绘制温度计源码分享
  • 东莞企业邮箱/seo查询5118
  • 深圳网站建设怎么选择/权重查询爱站网
  • 福田网站建设报价/双11销量数据
  • 专业网站建站/电商培训基地
  • 珲春建设银行网站/百度关键词排名
  • 有什么做兼职的好的网站/收录查询站长工具