基于 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 部分添加如下配置:
- Name:
3.9.10自定义名称。
- MAVEN_HOME:
/usr/local/maven/指向容器中 Maven 的安装路径(本例中已在容器中安装完成)。
示意图:

2. 配置 JDK 工具
在 JDK 部分添加如下配置:
- Name:
openjdk 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 凭证
在新增凭证页面中,选择以下字段并填写:
- Kind:
Username with password表示使用账号密码方式认证。
- Username:GitLab 用户名
- Password:GitLab 密码或访问令牌
示意图如下:
十一、创建 Maven 项目并配置自动部署流程
本节将介绍如何在 Jenkins 中创建一个 Maven 项目,并配置 GitLab Webhook 触发与自动部署流程。
1. 创建 Jenkins 项目
依次点击:
Dashboard -> All -> New Item
- 输入项目名称
- 选择 “构建一个 Maven 项目”
示意图:

2. 配置 GitLab 仓库地址
在 Source Code Management(源码管理) 中:
- 选择 Git
- Repository URL:填写 GitLab 仓库地址
- Credentials:选择第十章节中配置的 GitLab 凭证
- Branch to build:填写构建分支名称,例如:
main
示意图:

3. 配置构建触发器(Webhook)
勾选以下选项:
Build when a change is pushed to GitLab.启用 GitLab Webhook 触发功能。
保存后,Jenkins 会生成一个 Webhook URL 和 Secret Token。
示意图:

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

4. 配置 GitLab Webhooks
进入 GitLab 项目页面:
GitLab -> 项目 -> Settings -> Webhooks
进行如下配置:
- URL:填写 Jenkins 自动生成的 Webhook 地址
- Secret Token:填写 Jenkins 中生成的 Token
- 勾选 “Push events”
示意图:


5. 配置 Maven 构建命令
在 Build 部分添加构建步骤:
- 命令:
clean install -Dmaven.test.skip=true
说明:跳过单元测试,直接编译打包。
示意图:

6. 配置构建后自动部署(Publish over SSH)
在 Post-build Actions 中添加:
Send build artifacts over SSH
填写以下字段:
- Name:选择第九章节中配置的部署服务器
- Source files:
**/*.jar表示发布所有 JAR 包
- Remove prefix:
target/移除 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."
示意图:


&spm=1001.2101.3001.5002&articleId=119908592&d=1&t=3&u=2a18cdad9f4746fea1ed7bbe801b4072)
2367

被折叠的 条评论
为什么被折叠?



