cicd自动化部署(Ubuntu22.04)
一、CI/CD 自动化部署是什么?
CI/CD(持续集成/持续交付/持续部署) 是一种通过自动化工具和流程,将软件开发中的构建、测试、部署等环节自动化的方法。它的核心目标是提高软件交付效率、降低风险,并确保软件质量。
- 持续集成(CI)
:开发人员频繁将代码合并到主分支,每次提交都会触发自动化构建和测试,确保代码集成没有问题。
- 持续交付(CD)
:在持续集成的基础上,自动化地将代码部署到测试或预发布环境,确保代码可以随时发布。
- 持续部署(CD)
:在持续交付的基础上,自动化地将代码部署到生产环境,实现完全自动化的发布流程。
CI/CD 自动化部署依赖于一系列工具(如 Jenkins、GitLab CI、GitHub Actions、CircleCI 等)和脚本,将开发、测试、部署等环节串联起来,形成一个高效的流水线。
对比维度 | CI/CD 自动化部署 | 手动部署 | 脚本化部署 |
部署速度 | 极快,自动化流水线可以在几分钟内完成构建、测试和部署。 | 慢,依赖人工操作,容易出错且耗时。 | 较快,但需要手动触发脚本,且脚本可能不够灵活。 |
部署频率 | 支持高频部署,每天可以多次发布。 | 低频部署,通常以周或月为单位。 | 中频部署,依赖脚本的完善程度。 |
人为错误 | 几乎无,自动化流程减少了人为干预。 | 高,依赖人工操作,容易出错。 | 较低,但仍需人工触发脚本,存在一定风险。 |
测试覆盖率 | 高,每次提交都会触发自动化测试,确保代码质量。 | 低,测试依赖人工操作,可能遗漏。 | 中,脚本可以包含测试,但覆盖范围有限。 |
回滚能力 | 快速回滚,自动化工具支持一键回滚到稳定版本。 | 慢,回滚需要人工操作,容易出错。 | 较快,但需要手动执行回滚脚本。 |
环境一致性 | 高,自动化工具确保每次部署的环境一致。 | 低,人工操作可能导致环境差异。 | 中,脚本可以部分保证一致性,但仍有风险。 |
团队协作 | 高效,开发、测试、运维团队通过自动化流水线紧密协作。 | 低效,团队之间沟通成本高,容易产生误解。 | 中效,脚本化部署需要团队协作编写和维护脚本。 |
学习成本 | 较高,需要学习和配置 CI/CD 工具和流水线。 | 低,依赖人工操作,无需额外学习。 | 中,需要编写和维护脚本,学习成本适中。 |
适用场景 | 适合需要快速迭代、高频发布的现代软件开发(如互联网应用、微服务架构)。 | 适合小型项目或对发布频率要求不高的场景。 | 适合中等规模项目,但对自动化要求不高的场景。 |
工具依赖 | 依赖 CI/CD 工具(如 Jenkins、GitLab CI、GitHub Actions 等)。 | 无需额外工具,依赖人工操作。 | 依赖脚本(如 Shell、Python 脚本)和简单工具。 |
成本 | 初期投入较高(工具、学习、配置),但长期收益显著(效率提升、风险降低)。 | 初期成本低,但长期效率低、风险高。 | 初期成本适中,但维护脚本的成本较高。 |
二、准备工作
准备一个服务器
工具xftp8和xshell8
三、具体步骤
1.更新服务器
sudo apt update
2.下载docker
sudo apt install docker-ce
3. 验证是否安装成功
docker
4. 安装成功会显示以下内容
5.使用docker拉取镜像
docker pull jenkins/jenkins:lts
6.运行jenkins容器
Jenkins运行端口是8080给他映射到8899 50000是jenkins用于通信的
jenkins-data2:容器卷 名字
/var/run/docker.sock:/var/run/docker.sock -v在物理机中可以使用docker 把物理机的docker可以让容器用
jenkins/jenkins:lts 镜像
docker run -u root --name jenkins-test1 -d -p 8899:8080 -p 50000:50000 -v jenkins-data2:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts
7. 服务器安全组放行8899端口
8.服务器放行端口
sudo ufw allow 8899/tcp
9. 访问服务器的公网ip:8899
10. 服务器进入容器
docker exec -it jenkins-test1 /bin/bash
11. 查看管理员密码(路径就是第8步的路径)
cat /var/jenkins_home/secrets/initialAdminPassword
12. 填写密码
13.安装插件
14.创建管理用户
15.实例配置(服务器ip:8899)
16.安装插件
17.下载nvm
18. 下载gitee
19. 添加凭据
20. 返回Dashboard创建item
21. 添加gitee仓库
22.添加nvm
23.添加构建步骤 
#我这里使用了淘宝镜像源
npm install --registry=https://registry.npm.taobao.org
npm run build --registry=https://registry.npm.taobao.org
24.再次添加步骤
docker build -t test-ui:latest .
执行完成之后再次增加构建步骤(80需要关闭防火墙才可以执行下面我改为了99端口 )
# 定义容器名称
container_name="test-ui"
# 检查容器是否存在
if docker ps -a | grep -q $container_name; then
# 如果容器存在,则删除它
docker rm -f $container_name
else
# 如果容器不存在,跳过删除操作
echo "容器不存在,跳过删除操作。"
fi
# 通过镜像运行一个新的容器
docker run -d --name $container_name -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -v /home/ddxpc/ui/logs:/home/ddxpc/ui/logs -p 99:8088 test-ui:latest
25.在项目中创建两个文件
Dockerfile文件
FROM nginx
# 设置别名
RUN echo 'alias ll="ls -"' >> ~/.bashrc
# 更新 apt-get 包索引
RUN apt-get update
# 安装 bash 和 vim
RUN apt-get install -y bash vim
# 安装 ping
RUN apt-get install -y iputils-ping
# 安装并配置语言工具包,防止中文乱码
RUN apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
# 安装 net-tools 包,它包含了 netstat 工具
RUN apt-get install -y net-tools
# 复制构建好的 dist 文件
COPY ./dist /home/ddxpc/ui/dist
# 移除 Nginx 配置文件中的默认配置
RUN rm /etc/nginx/conf.d/default.conf
# 复制自定义的 Nginx 配置文件到容器中
COPY ./nginx_dev.conf /etc/nginx/conf.d
# 暴露 Nginx 的 80 端口
EXPOSE 80
nginx_dev.conf文件
server {
listen 8088;
server_name 123.57.222.215;
charset utf-8;
# 指定日志路径
access_log /home/ddxpc/ui/logs/access.log;
error_log /home/ddxpc/ui/logs/error.log;
# 根目录配置
location / {
root /home/ddxpc/ui/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
# 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
26.把本地代码推送gitee仓库
27.打开服务器公网ip:8899开始构建
构建中
控制台详情
构建完成
访问 http://123.57.222.215:99/ 启动本地做对比
28. 推送代码自动构建并部署
推送代码
访问