CICD ->持续集成/(持续交付、持续部署)


CI/CD流程概述

一个典型的CI/CD流程包括以下主要步骤:

  1. 代码提交和版本控制(Git) -CI
  2. 持续集成触发 -CI
  3. 构建阶段 -CI
  4. 自动化测试 -CI
  5. 构建工件存储 CI 和 CD 的衔接点
  6. 部署到环境 CD
  7. 监控和反馈 CD

一、CI/CD的定义

1. 持续集成(CI,Continuous Integration)

定义

持续集成是一种软件开发实践,开发人员经常地(通常每天多次)将代码更改合并到主干分支。每次代码提交后,自动化的构建和测试过程会被触发,以确保代码在集成后仍然保持高质量。

目标

  • 减少集成风险:及时发现代码冲突和缺陷。
  • 提高代码质量:通过自动化测试,确保新代码的可靠性。
  • 加快开发速度:频繁的小规模集成,避免大规模合并带来的复杂性。

2. 持续交付和持续部署(CD,Continuous Delivery/Continuous Deployment)

定义

  • 持续交付(Continuous Delivery):在持续集成的基础上,确保软件在任何时候都可以安全地发布到生产环境,但实际部署可能需要手动触发。
  • 持续部署(Continuous Deployment):进一步自动化,当代码通过所有测试后,自动部署到生产环境,无需人工干预。

目标

  • 快速响应业务需求:新功能和修复可以更快地上线。
  • 降低发布风险:通过小步快跑的方式,减少每次发布的影响面。
  • 提高交付效率:自动化部署过程,减少人为错误。

二、主流的CI/CD应用及具体实现

1. 技术栈

  • 版本控制:Git(代码托管在GitLab、GitHub或Gitee等平台)
  • 持续集成/持续部署工具:Jenkins、GitLab CI/CD、GitHub Actions等
  • 容器化技术:Docker
  • 容器编排:Kubernetes(可选)
  • 镜像仓库:Docker Hub、Harbor、阿里云容器镜像服务等

2. 流程概述

  1. 代码提交(Git):开发者将前端(Vue3)和后端(Spring Boot)的代码推送到Git仓库。
  2. CI触发:CI工具检测到代码变更,拉取最新代码。
  3. 构建阶段
    • 前端构建:使用npm或yarn构建Vue3项目,生成静态资源。
    • 后端构建:使用Maven或Gradle构建Spring Boot项目,生成jar文件。
  4. Docker镜像构建(Dockerfile)
    • 前端镜像:使用Nginx或其他Web服务器,将前端静态资源打包到Docker镜像中。
    • 后端镜像:将Spring Boot应用打包到Docker镜像中。
  5. 自动化测试:在容器中运行测试套件,确保代码质量。
  6. 镜像推送:将构建的Docker镜像推送到镜像仓库。
  7. 部署(CD):从镜像仓库拉取镜像,部署到测试或生产环境。
  8. 监控和反馈:监控应用运行状态,收集日志和性能指标。

3. 具体实现步骤

步骤1:代码提交(Git)
  • 前端开发者修改Vue3项目代码,执行git commitgit push
  • 后端开发者修改Spring Boot项目代码,执行git commitgit push
步骤2:CI触发
  • CI工具配置:配置Webhooks或使用GitLab CI/CD集成,当仓库有新的提交时,自动触发CI流程。
步骤3:构建阶段

前端构建:

  • 安装依赖npm installyarn install
  • 构建项目npm run buildyarn build
  • 生成的静态文件:位于dist/目录下

后端构建:

  • 构建项目mvn clean package./gradlew build
  • 生成的jar文件:位于target/build/libs/目录下
步骤4:Docker镜像构建(Dockerfile)

前端Dockerfile示例:

# 使用官方的Nginx镜像作为基础镜像
FROM nginx:alpine

# 维护者信息
MAINTAINER YourName <your.email@example.com>

# 删除默认的Nginx配置
RUN rm -rf /usr/share/nginx/html/*

# 将前端构建的静态文件复制到Nginx目录
COPY dist/ /usr/share/nginx/html/

# 复制自定义的Nginx配置(可选)
# COPY nginx.conf /etc/nginx/nginx.conf

# 暴露端口
EXPOSE 80

# 启动Nginx
CMD ["nginx", "-g", "daemon off;"]

后端Dockerfile示例:

# 使用OpenJDK作为基础镜像
FROM openjdk:17-jdk-alpine

# 维护者信息
MAINTAINER YourName <your.email@example.com>

# 应用目录
WORKDIR /app

# 将jar包复制到容器中
COPY target/your-app.jar /app/app.jar

# 暴露端口(与Spring Boot应用配置的端口一致)
EXPOSE 8080

# 运行jar包
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
步骤5:自动化测试
  • 前端测试:在构建之前或之后,运行npm testyarn test
  • 后端测试:使用mvn test./gradlew test运行单元测试和集成测试。
步骤6:镜像推送
  • 登录镜像仓库docker login
  • 标记镜像
    • 前端镜像:docker tag your-frontend-image:latest your-repo/your-frontend-image:version
    • 后端镜像:docker tag your-backend-image:latest your-repo/your-backend-image:version
  • 推送镜像
    • docker push your-repo/your-frontend-image:version
    • docker push your-repo/your-backend-image:version
步骤7:部署(CD)
  • 拉取镜像
    • docker pull your-repo/your-frontend-image:version
    • docker pull your-repo/your-backend-image:version
  • 运行容器
    • 前端容器:
      docker run -d -p 80:80 your-repo/your-frontend-image:version
      
    • 后端容器:
      docker run -d -p 8080:8080 your-repo/your-backend-image:version
      
  • 容器编排(可选):使用Docker Compose或Kubernetes编排前后端服务。
步骤8:监控和反馈
  • 日志收集:使用ELK/EFK栈收集和分析日志。
  • 性能监控:使用Prometheus和Grafana监控应用的性能指标。

三、Dockerfile

Dockerfile在CI/CD中的作用

  • 环境一致性:通过Dockerfile定义应用运行环境,确保在开发、测试和生产环境中的一致性。
  • 自动化构建:CI工具可以根据Dockerfile自动构建镜像,无需人工干预。
  • 可移植性:Docker镜像可以在任何支持Docker的环境中运行,方便部署和迁移。

四、主流CI/CD工具的选择

1. Jenkins

  • 特点:高度可定制,插件丰富,支持各种语言和项目类型。
  • 应用:需要自行搭建和维护CI/CD服务器,适用于对流程有特殊要求的团队。

2. GitLab CI/CD

  • 特点:与GitLab代码仓库紧密集成,易于配置,支持YAML文件定义流水线。
  • 应用:如果代码托管在GitLab上,使用GitLab CI/CD是一个高效的选择。

3. GitHub Actions

  • 特点:集成在GitHub中的CI/CD工具,使用YAML文件定义工作流,支持多种事件触发。
  • 应用:适用于代码托管在GitHub的项目。

4. Drone CI

  • 特点:基于容器的CI/CD平台,配置简单,使用YAML文件定义。
  • 应用:适用于喜欢轻量级、容器化的CI/CD解决方案的团队。

五、CI/CD流程示意图

[开发者提交代码(Git)]
       ↓
[CI工具检测到变更,拉取代码]
       ↓
[前端/后端项目构建]
       ↓
[Docker镜像构建(Dockerfile)]
       ↓
[运行自动化测试]
       ↓
[推送镜像到镜像仓库]
       ↓
[CD工具部署镜像到环境]
       ↓
[应用运行,监控和反馈]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容