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 update2.下载dockersudo 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:889910. 服务器进入容器docker exec -it jenkins-test1 /bin/bash11. 查看管理员密码路径就是第8步的路径cat /var/jenkins_home/secrets/initialAdminPassword12. 填写密码13.安装插件14.创建管理用户15.实例配置服务器ip:889916.安装插件17.下载nvm18. 下载gitee19. 添加凭据20. 返回Dashboard创建item21. 添加gitee仓库22.添加nvm23.添加构建步骤#我这里使用了淘宝镜像源 npm install --registryhttps://registry.npm.taobao.org npm run build --registryhttps://registry.npm.taobao.org24.再次添加步骤docker build -t test-ui:latest .执行完成之后再次增加构建步骤80需要关闭防火墙才可以执行下面我改为了99端口 # 定义容器名称 container_nametest-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 LANGC.UTF-8 -e LC_ALLC.UTF-8 -v /home/ddxpc/ui/logs:/home/ddxpc/ui/logs -p 99:8088 test-ui:latest25.在项目中创建两个文件Dockerfile文件FROM nginx # 设置别名 RUN echo alias llls - ~/.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. 推送代码自动构建并部署推送代码访问