基于 Docker 搭建 Jenkins + GitLab 自动化部署环境(CentOS)

该文章已生成可运行项目,

基于 Docker 搭建 Jenkins + GitLab 自动化部署环境(CentOS)

本文介绍如何在 CentOS 系统上,通过 Docker 快速部署 Jenkins 和 GitLab 服务,配置 swap 分区,适用于内存较小的服务器环境,实现 Jenkins + GitLab 推送代码并自动化部署 Java 项目。


服务器配置说明

本系统共使用两台服务器,分别承担不同的职责:

服务器一:Docker 平台服务器

  • 操作系统:CentOS 7.6
  • CPU:4 核
  • 内存:4 GB
  • 用途
    • 安装 Docker 环境
    • 部署以下容器服务:
      • Jenkins:用于持续集成/持续部署(CI/CD)
      • GitLab:用于代码托管与版本控制

服务器二:Java 服务部署服务器

  • 操作系统:CentOS 7.6
  • CPU:2 核
  • 内存:2 GB
  • 用途
    • 部署 Java 后端服务

一、Docker 安装与配置(CentOS)

1. 安装 Docker 依赖组件

sudo yum install -y yum-utils

2. 添加阿里云镜像源

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安装 Docker CE

sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4. 配置镜像加速器

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com",
        "https://cjie.eu.org"
    ]
}
EOF

5. 启动 Docker 并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker

6. 验证安装是否成功

查看 Docker 版本
docker version
检查镜像加速器配置是否生效
docker info

确认输出中包含如下内容:

Registry Mirrors:
 https://docker.m.daocloud.io/
 https://docker.imgdb.de/
 ...

若包含上述镜像地址,说明加速器配置成功


二、内存不足时配置 Swap 分区

适用于内存不足的云服务器,防止构建 Jenkins 或 GitLab 时因内存不够而失败。

# 创建 4GB 的 swap 文件
sudo fallocate -l 4G /swapfile

# 设置权限(必须为 600)
sudo chmod 600 /swapfile

# 格式化为 swap 分区
sudo mkswap /swapfile

# 启用 swap
sudo swapon /swapfile

# 设置开机自动挂载
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab

# 优化 swappiness 参数
sudo sysctl vm.swappiness=10
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

# 重启系统使配置生效
sudo reboot

验证是否启用成功:

swapon --show

三、部署 Jenkins 服务

1. 拉取 Jenkins 镜像

docker pull jenkins/jenkins:lts

2. 创建宿主机挂载目录

mkdir -p /opt/jenkins_home
sudo chmod -R 777 /opt/jenkins_home

3. 启动 Jenkins 容器

docker run -d --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -v /opt/jenkins_home:/var/jenkins_home \
  --restart unless-stopped \
  jenkins/jenkins:lts

4. 验证 Jenkins 状态

docker ps

5. 访问 Jenkins 页面

打开浏览器访问:http://127.0.0.1:8080

6. 获取初始管理员密码

cat /opt/jenkins_home/secrets/initialAdminPassword

7. 点击安装推荐插件

四、部署 GitLab 服务

1. 拉取 GitLab 社区版镜像

docker pull gitlab/gitlab-ce

2. 创建数据挂载目录

mkdir -p /opt/gitlab/config /opt/gitlab/logs /opt/gitlab/data
# 设置权限(如需可操作)
sudo chmod -R 777 /opt/gitlab

3. 启动 GitLab 容器

docker run -d --name gitlab \
  -p 8180:8180 -p 8181:8181 \
  -v /opt/gitlab/config:/etc/gitlab \
  -v /opt/gitlab/logs:/var/log/gitlab \
  -v /opt/gitlab/data:/var/opt/gitlab \
  --restart unless-stopped \
  gitlab/gitlab-ce

4. 修改GitLab配置

vi /opt/gitlab/config/gitlab.rb

# 设置 GitLab 外部访问地址及端口
external_url 'http://ip:8180'
nginx['listen_port'] = 8180

# 设置 SSH 克隆时显示的主机地址和端口
gitlab_rails['gitlab_ssh_host'] = 'ip'     # GitLab 访问主机名或 IP
gitlab_rails['gitlab_shell_ssh_port'] = 8181            # 映射 SSH 端口

5. 应用配置并重启

# 进入容器
docker exec -it gitlab bash
# 应用配置变更
gitlab-ctl reconfigure
# 重启服务
gitlab-ctl restart
exit

6. 查看初始化密码

cat /opt/gitlab/config/initial_root_password

7. 访问GitLab

打开浏览器访问:http://127.0.0.1:8080
默认登录账号为:root


五、GitLab 内存优化配置(适配 4G 内存)

为提升 GitLab 在 4G 内存服务器上的运行效率,建议进行如下精简设置。

1. 编辑配置文件 gitlab.rb

vi /opt/gitlab/config/gitlab.rb

修改如下配置:

# 降低 Puma(Web 服务)并发处理能力,减小内存占用
puma['worker_processes'] = 1         # Web 进程数(默认 2)
puma['min_threads'] = 1              # 最小线程数
puma['max_threads'] = 2              # 最大线程数

# 减少 Sidekiq(后台任务处理服务)并发线程数
sidekiq['concurrency'] = 2           # 默认值为 25,可显著降低内存消耗

# 禁用监控组件,节省资源
prometheus_monitoring['enable'] = false   # Prometheus:性能监控服务
alertmanager['enable'] = false            # Alertmanager:告警通知服务
grafana['enable'] = false                 # Grafana:监控图形界面工具

# 可选:关闭不必要的服务以节省内存
mattermost['enable'] = false        # Mattermost:团队聊天系统(默认启用)
gitlab_kas['enable'] = false        # GitLab Kubernetes Agent(集成 K8S)

2. 应用配置并重启

# 进入容器
docker exec -it gitlab bash
# 应用配置变更
gitlab-ctl reconfigure
# 重启服务
gitlab-ctl restart
exit

六、Jenkins 安装插件

以下插件用于支持 GitLab 集成、构建控制和自动部署:

  • Publish Over SSH:将构建产物通过 SSH 协议发送到远程服务器,适用于自动部署。
  • GitLab:集成 GitLab 和 Jenkins,支持 Webhook 触发构建、代码拉取、凭据认证等功能。
  • Maven Integration:支持 Maven 项目构建,让 Jenkins 能识别 pom.xml 并执行构建命令(如 mvn clean install)。

七、在 Jenkins 容器中安装并配置 Maven

为了让 Jenkins 能构建 Maven 项目,需要在容器中安装 Maven。本步骤将在宿主机下载 Maven 压缩包,并复制至 Jenkins 容器中进行解压与环境变量配置。

1. 宿主机中下载 Maven 安装包

wget https://dlcdn.apache.org/maven/maven-3/3.9.10/binaries/apache-maven-3.9.10-bin.tar.gz -P /tmp/

下载 Maven 安装包到宿主机的 /opt/ 目录中,便于后续复制进容器。

2. 将安装包复制到 Jenkins 容器中

docker cp /tmp/apache-maven-3.9.10-bin.tar.gz jenkins:/usr/local/

将安装包复制到容器内的 /usr/local/ 目录,准备在容器中进行解压和安装。

3. 进入 Jenkins 容器并安装 Maven

docker exec -u root -it jenkins bash
cd /usr/local
tar -zxvf apache-maven-3.9.10-bin.tar.gz
mv apache-maven-3.9.10 maven
rm apache-maven-3.9.10-bin.tar.gz
  • 解压安装包;
  • 将文件夹重命名为 maven
  • 删除原始安装包。

4. 配置 Maven 环境变量

echo 'export MAVEN_HOME=/usr/local/maven' >> /etc/profile
echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

将 Maven 安装路径写入系统环境变量,使 mvn 命令全局可用。

5. 验证 Maven 是否安装成功

mvn -v
exit

查看 Maven 版本信息,验证配置是否生效。


八、配置 Maven & JDK(Jenkins 工具链设置)

在 Jenkins 中,为了正确构建 Java/Maven 项目,需要配置 Maven 与 JDK 工具路径。

1. 配置 Maven 工具

进入 Jenkins 控制台:

Dashboard -> Manage Jenkins -> Global Tool Configuration

Maven 部分添加如下配置:

  • Name3.9.10

    自定义名称。

  • MAVEN_HOME/usr/local/maven/

    指向容器中 Maven 的安装路径(本例中已在容器中安装完成)。

示意图:
配置 Maven 工具


2. 配置 JDK 工具

JDK 部分添加如下配置:

  • Nameopenjdk 21.0.7

    自定义名称。

  • JAVA_HOME/opt/java/openjdk

    本文中使用 Jenkins 容器自带的 OpenJDK,路径为 /opt/java/openjdk

若不确定 JAVA_HOME,可进入 Jenkins 容器内部执行以下命令查看:

echo $JAVA_HOME

示意图

在这里插入图片描述

九、配置部署服务器(Publish Over SSH)

为了让 Jenkins 能将构建产物部署到远程服务器,需要配置 SSH 主机信息。

1. 进入系统配置页面

依次点击:

Dashboard -> Manage Jenkins -> System

向下滚动找到 Publish over SSH 配置区域。


2. 添加部署服务器信息

点击 “Add” 添加一台远程服务器,填写以下字段:

  • Name:自定义名称
  • Hostname:远程服务器的 IP 地址或域名
  • Username:用于登录远程服务器的用户名(如:root
  • Password:对应用户的登录密码(或使用密钥方式)

示意图如下:
配置部署服务器


十、配置 GitLab 凭证

为了使 Jenkins 能与 GitLab 安全通信(如拉取代码、接收 Webhook 触发),需要在 Jenkins 中添加 GitLab 的访问凭证。


1. 进入凭证管理页面

依次点击:

Dashboard -> Manage Jenkins -> Credentials

然后选择合适的作用域(如 System(global)),点击 “Add Credentials”

示意图:

进入凭证管理页面


2. 添加 GitLab 凭证

在新增凭证页面中,选择以下字段并填写:

  • KindUsername with password

    表示使用账号密码方式认证。

  • Username:GitLab 用户名
  • Password:GitLab 密码或访问令牌

示意图如下:

配置 GitLab 凭证

十一、创建 Maven 项目并配置自动部署流程

本节将介绍如何在 Jenkins 中创建一个 Maven 项目,并配置 GitLab Webhook 触发与自动部署流程。


1. 创建 Jenkins 项目

依次点击:

Dashboard -> All -> New Item

  • 输入项目名称
  • 选择 “构建一个 Maven 项目”

示意图:

创建 Maven 项目


2. 配置 GitLab 仓库地址

Source Code Management(源码管理) 中:

  • 选择 Git
  • Repository URL:填写 GitLab 仓库地址
  • Credentials:选择第十章节中配置的 GitLab 凭证
  • Branch to build:填写构建分支名称,例如:main

示意图:

配置 Git 地址


3. 配置构建触发器(Webhook)

勾选以下选项:

  • Build when a change is pushed to GitLab.

    启用 GitLab Webhook 触发功能。

保存后,Jenkins 会生成一个 Webhook URL 和 Secret Token。

示意图:

配置触发器

Secret Token 会用于 GitLab 校验 Webhook 请求身份

生成 Secret Token


4. 配置 GitLab Webhooks

进入 GitLab 项目页面:

GitLab -> 项目 -> Settings -> Webhooks

进行如下配置:

  • URL:填写 Jenkins 自动生成的 Webhook 地址
  • Secret Token:填写 Jenkins 中生成的 Token
  • 勾选 “Push events”

示意图:

GitLab 设置 Webhook
Webhook 填写页面


5. 配置 Maven 构建命令

Build 部分添加构建步骤:

  • 命令:clean install -Dmaven.test.skip=true

说明:跳过单元测试,直接编译打包。

示意图:

Maven 构建配置


6. 配置构建后自动部署(Publish over SSH)

Post-build Actions 中添加:

Send build artifacts over SSH

填写以下字段:

  • Name:选择第九章节中配置的部署服务器
  • Source files**/*.jar

    表示发布所有 JAR 包

  • Remove prefixtarget/

    移除 jar 包路径前缀(否则部署目录中会有 target 文件夹)

  • Remote directory/opt/java

    远程服务器部署路径

执行部署脚本(Exec command):
cd /opt/java/

# 1. 查找并杀掉旧进程
PID=$(ps -ef | grep 'demo-0.0.1-SNAPSHOT.jar' | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
  echo "Killing old process: $PID"
  kill -9 $PID
fi

# 2. 启动新进程,重定向日志
nohup java -jar demo-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
echo "New process started."

示意图:

在这里插入图片描述

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值