GitLab + Jenkins + Docker 一键部署
一、前言
在当下软件开发迭代飞速的时代,传统手动部署模式的弊端愈发凸显,部署流程繁琐、环境配置不一致、版本更新出错率高、迭代效率低下等问题,一直困扰着开发与运维人员。随着DevOps理念的普及,自动化、标准化、容器化部署已然成为企业项目落地的主流方案。
GitLab 作为主流的代码托管与版本控制工具,能够实现代码的高效管理、分支管控与团队协作;Jenkins 是开源持续集成/持续部署核心工具,可完成代码拉取、编译、测试、打包的全流程自动化调度;而 Docker 容器技术则彻底解决了“本地运行正常、线上部署报错”的环境兼容难题,实现项目环境的一致性封装与快速迁移。
三者结合可以搭建出一套完整的 CI/CD 自动化部署流水线,实现代码提交、自动构建、自动打包、容器部署、服务更新的一键全自动操作,极大降低部署成本、提升迭代效率。本文将从零落地,手把手带大家搭建 GitLab+Jenkins+Docker 一键部署环境,梳理整套流程的核心原理、配置要点与避坑技巧,帮助大家快速落地企业级自动化部署方案。
二、前置环境
VM 虚机
Ubuntu 25 可使用清华镜像下载 Index of /ubuntu-releases/25.10/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
Docker
Jenkins + Java + Gitlab 流水线一键部署-CSDN博客
三、安装和部署
本次操作在部署机执行
3.1 克隆项目
项目地址: GitHub - 438083791/jenkins · GitHub
## 切换到超级管理员
sudo -i
#切换到根目录
cd /
## 如果没装git 安装一下git
apt install git
## 克隆代码
sudo git clone https://github.com/438083791/jenkins.git /jenkins
3.2 执行Docker安装脚本
## 进入 03-docker 目录
cd /jenkins/deploy/03-docker
## 复制 .env 文件
cp .env.example .env
## 启动docker
bash compose.sh up
## 查看密码
bash compose.sh passwords
3.3 部署成功

3.4 查看 jenkins 和 gitlab 密码
## 查看密码
bash compose.sh passwords
3.5 配置jenkins 和 gitlab
关闭防火墙或放行 80端口
## 关闭防火墙-正式环境建议仅开放80端口
ufw disable
Gitlab地址:http://你的服务器ip/
账号:Root/ 密码看上面
Jenkins 地址: http://你的服务器ip:8080/
激活密码看上面(后续可根据提示添加admin账户)
可参考
Jenkins + Java + Gitlab 流水线一键部署-CSDN博客
3.6 生成SSH 并配置在GItlab中(用于推送代码)
## 生成ssh
ssh-keygen -t ed25519
## 查看公钥
cat /root/.ssh/id_ed25519.pub
## 将公钥配置在Gitlab SSH 中
## **** 关键步骤 ****
## 配置完gitlab SHH 测试是否能连同gitlab
## 让服务器记录你的gitlab登录凭证
ssh -p 2222 git@你的服务器ip
3.7 初始化Gitlab 仓库




3.8 将代码web-test 推送至 gitlab 仓库
## 进入web-test 目录
cd /jenkins/web-test
## 配置git 信息
git config user.name "jenkins-root"
git config user.email "jenkins@local.com"
# 1. 初始化git仓库(不存在.git才执行)
git init
# 2. 全部文件加入暂存
git add .
# 3. 生成第一条提交(必须有提交才能推送)
git commit -m "init web project"
# 4. 再次强制推送到远端master
git push ssh://git@192.168.122.129:2222/test/web-test.git HEAD:master -f
3.9 在gitlab 创建 access tokens



3.10 激活jenkins 并安装插件
## 查看需要安装的插件
cat /jenkins/deploy/03-docker/jenkins/plugins.txt




3.11 将gitlab access tokens 配置在jenkins中
先复制上面创建的gitlab access tokens



3.12 新建Jenkins流水线



在jenkins 容器创建ssh key
## 查看docker 列表
docker ps
## 进入docker
docker exec -it 03-docker-jenkins-1 /bin/bash
## 生成ssh KEY
ssh-keygen -t ed25519
## 查看公钥
/var/jenkins_home/.ssh/id_ed25519.pub
## 将公钥配置在Gitlab SSH 中
## **** 关键步骤 ****
## 配置完gitlab SHH 测试是否能连同gitlab
## 让服务器记录你的gitlab登录凭证
ssh -p 2222 git@你的服务器ip
## 查看私钥
cat /var/jenkins_home/.ssh/id_ed25519
将上面生成的ssh 公钥配置在gitlab ssh,然后将私钥配置在jenkins Credentials 中

3.13 配置webhooks
在jenkins 创建 Secret Token

## 设置 gitlab network (否则设置代码仓库webhooks 的时候,url 不能使用内网ip)
http://192.168.122.129/admin/application_settings/network#js-outbound-settings


创建gitlab webhooks


3.14 部署成功

3.15 需要注意与之前部署不同的地方
gitlab 端口地址是: ssh://git@你的服务器ip:2222/test/web-test.git
gitlab 默认主分支是:main ,所以配置jenkins 的时候需要注意分支。
gitlab 项目network 配置移动到了 : http://你的服务器ip/admin/application_settings/network
流水线脚本路径改为 Jenkinsfile.docker_full

3.16 本次踩坑的点。。
Jenkins 流水线配置中,轻量级检查不能勾选(好像我手欠给√了,导致一直报错)

报错信息
Started by user admin
hudson.plugins.git.GitException: Command "git config remote.origin.url ssh://git@192.168.122.150:2222/test/web-test.git" returned status code 128:
stdout:
stderr: fatal: not in a git directory
at PluginClassLoader for git-client//org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2852)
at PluginClassLoader for git-client//org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2777)
at PluginClassLoader for git-client//org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2772)
at PluginClassLoader for git-client//org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:2055)
at PluginClassLoader for git-client//org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:2067)
at PluginClassLoader for git-client//org.jenkinsci.plugins.gitclient.CliGitAPIImpl.setRemoteUrl(CliGitAPIImpl.java:1668)
at PluginClassLoader for git-client//hudson.plugins.git.GitAPI.setRemoteUrl(GitAPI.java:182)
at PluginClassLoader for git//jenkins.plugins.git.GitSCMFileSystem$BuilderImpl.build(GitSCMFileSystem.java:391)
Caused: java.io.IOException
at PluginClassLoader for git//jenkins.plugins.git.GitSCMFileSystem$BuilderImpl.build(GitSCMFileSystem.java:409)
at PluginClassLoader for scm-api//jenkins.scm.api.SCMFileSystem.of(SCMFileSystem.java:219)
at PluginClassLoader for workflow-cps//org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:123)
at PluginClassLoader for workflow-cps//org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:70)
at PluginClassLoader for workflow-job//org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:342)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:456)
Finished: FAILURE
四、结语
本文完整讲解了基于 GitLab、Jenkins、Docker 搭建一站式 CI/CD 自动部署平台的全部流程,从代码托管、流水线配置到容器化打包部署,完成了从手动部署到全自动一键部署的完整升级。这套组合方案摒弃了传统部署的人工干预,实现了代码提交即部署的开发模式,不仅统一了项目运行环境、规避了环境差异带来的故障,还大幅缩短了项目迭代周期,有效提升了研发运维效率。
GitLab 保障代码仓库的规范管理,Jenkins 承担自动化流水线的核心调度,Docker 实现项目的轻量化、可移植部署,三者相辅相成,构成了轻量化、低成本、易维护的企业级 DevOps 基础架构。对于中小型项目、个人开发以及企业团队内部服务部署而言,该方案兼容性强、部署门槛低、实用性极高。
当然,整套流水线还可进一步优化拓展,例如结合分支策略实现多环境部署、添加构建日志监控、配置失败自动告警、集成单元测试与代码扫描等功能。希望通过本文的实战分享,大家能够熟练掌握这套自动化部署方案,摆脱重复繁琐的手动部署工作,真正实现开发运维一体化,让项目迭代更加高效、稳定。后续也会持续更新 DevOps 相关进阶优化技巧,助力大家精进技术、提升工作效率。
更多推荐










所有评论(0)