一、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 update2.下载docker
sudo apt install docker-ce3. 验证是否安装成功
docker4. 安装成功会显示以下内容
5.使用docker拉取镜像
docker pull jenkins/jenkins:lts6.运行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:lts7. 服务器安全组放行8899端口
8.服务器放行端口
sudo ufw allow 8899/tcp9. 访问服务器的公网ip:8899
10. 服务器进入容器
docker exec -it jenkins-test1 /bin/bash11. 查看管理员密码(路径就是第8步的路径)
cat /var/jenkins_home/secrets/initialAdminPassword12. 填写密码
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.org24.再次添加步骤
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:latest25.在项目中创建两个文件
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 80nginx_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. 推送代码自动构建并部署
推送代码
访问