当前位置: 首页 > news >正文

Springboot应用配置github自动流部署 深入理解CI/CD:构建、测试和部署的自动化完整流程

什么是 CI

持续集成

通过自动化的流程和工具,提高软件开发的效率、质量和交付速度。

持续集成是开发团队通过将代码的不同部分集成到共享存储库中,并频繁地进行构建和测试,以确保代码的一致性和稳定性。

概念

在现在的开发模式中,一般的项目,协同开发是离不开的,这就涉及到多个开发人员编写处理自己负责的功能模块或者某些开发人员共同负责一个模块。于是,通过版本控制系统可以将各个开发人员的代码集成在该共享存储库里,在存储库里,每个开发人员根据需求的不同来创建对应的分支,在完成需求后,每个人都需要提交合并将开发分支代码集成在一起,这就需要解决代码冲突,并且如何除了code review之外如何确保这些更改对应用没有产生影响,一旦提交请求合并到主分支,自动化构建工具就会根据流程自动编译构建安装应用,并执行单元测试框架的自动化测试来校验提交的修改。

CI 主要有三部分组成

1.版本控制系统 如 git

2.自动化构建工具 如 Jenkins

3.单元测试框架 如 JUnit Jcoco

什么是 CD

持续交付

持续交付建立在持续集成的基础上,通过自动化的流程确保软件可以随时随地进行部署。

概念

这时,持续交付后的代码已经在主分支上了,这处于某个版本的待发布的状态,随时可以将开发环境的功能部署到生产环境中(部署到生成环境前还需要在测试环境性能测试、回归测试、自动化测试、人工测试等),运行脚本构建打包应用,通过自动化部署工具部署到生产环境运行应用,监控生产环境指标,如出现问题和错误,可以触发手动或自动回滚,如系统正常,则定期回顾,收集反馈,优化,并持续改进。

CD 主要有三部分组成

1.自动化部署工具 如 docker

2.环境变量控制工具

3.持续监控和反馈

好处

减少集成问题

提高代码质量

提高开发效率

快速交付到生产环境

降低风险

降低发布成本

支持持续改进

GitHub Action

采用CI/CD可以通过自动化流程和工具自动帮你构建应用、测试应用、部署应用,将你的应用交给流程工具来管理,做到自动触发、验证、部署等功能,从而减省人工成本、提高交付速度,在敏捷开发、DevOps中扮演着重要的角色。

GitHub Action正是这样一个实现持续集成交付的自动化流程工具,是由GitHub提供的一个组件。你可以通过YAML文件的配置定义工作流程以构建执行CI/CD流水线,并可以触发不同事件时(如代码提交push、Pull Request、schedule)自动执行这些工作流程。

工作流(Workflows)

工作流是GitHub Actions执行任务的基本单位,你可以为Git上不同的事件(如push、pull、request等)定义不同的工作流,以响应操作代码的变更。

任务(Jobs)

工作流程由一个或多个任务组成,每个任务运行在独立的虚拟环境中。任务可以是构建、测试、部署等操作。

步骤(Steps)

任务由多个步骤组成,每个步骤执行一个操作。一个步骤可以是运行命令、使用某个预定义的操作,或者调用自定义脚本。

举例

假如我们对项目中其中一个服务做了修改,添加了某些功能,完成任务后,我们在本地分支通过Git提交代码到Github项目仓库下的dev分支(这里直接本地提交到测试分支,省去测试环境测试的流程),并请求合并到master分支,这时,我们希望在合并之前先对该模块进行构建,运行测试来校验代码质量与验证代码是否出错,确保代码的基本功能在集成后仍然有效,测试通过后,提交到打包部署分支bdeploy来自动将模块打包成一个容器镜像推送到容器镜像仓库,并将docker-compose文件拷贝到远程生产服务器执行部署。

name: compile

on:
  pull_request:
    paths: #当有 pull request,且文件路径包含 Java 文件或者当前的工作流配置文件时触发。
      - '**.java'
      - .github/workflows/compile.yml
jobs:
  compile: #任务名称
    runs-on: ubuntu-latest
    timeout-minutes: 30

    steps:
      - name: Checkout code
        uses: actions/checkout@v3 #actions/checkout@v3 是 GitHub Actions 中一个常用的操作(Action),用于从存储库中检出代码。@v3 是指定该 Action 的版本号。在这里,v3 表示使用的是版本 3。

      - name: Set up Java
        uses: actions/setup-java@v3 #actions/setup-java@v3 操作被用于设置 Java 运行环境
        with:
          java-version: '11' # 指定所需的 Java 版本
          distribution: 'temurin' #'temurin' 表示使用 Temurin(先前称为 AdoptOpenJDK) 的发行版。Temurin 提供了免费的、社区驱动的 OpenJDK 发行版。

      - name: Build with Maven
        run: mvn clean install

      - name: Run JUnit test
        run: mvn test

GitHub Action 示例 自己写的

我自己写的一份

# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Java CI with Maven

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    # 在linux上跑 使用的环境是ubuntu
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven

      # 打包项目
      - name: Build with Maven
        run: mvn -B package --file pom.xml

      # 执行单元测试
      #      - name: Run Tests
      #        run: mvn test

      # 检查依赖
      - name: Update dependency graph
        uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6

      # 代码静态检查
      - name: Code Static Analysis
        run: |
             mvn checkstyle:check 
             mvn pmd:check        
             mvn spotbugs:check 

      # 代码覆盖率检查
      - name: Code Coverage
        run: mvn jacoco:report # 生成 JaCoCo 覆盖率报告、

每次提交后都会进行 跑一个 持续集成的流程

并且给出报告

参考文章

深入理解CI/CD:构建、测试和部署的完整流程_cicd自动化部署流程-CSDN博客

相关文章:

  • 千变万化的卷积
  • HarmonyOS 之 @Require 装饰器自学指南
  • 字符串常量,数组和指针的不同形式
  • 2000-2019年各省地方财政契税数据
  • 记一次线上程序宕机问题分析【写 GC 日志导致进程挂起】
  • 比较Linux的Shell的 `EOF` 与 `echo` 与 `printf` , 将文本输出到文件
  • 003-51单片机-最小系统
  • 科学计算(2):矩阵特征值计算
  • gradio调用多个CSS的HTML页
  • 【AI论文】MARS:融入苏格拉底引导的多代理框架实现自动化提示优化
  • [已解决]服务器CPU突然飙高98%----Java程序OOM问题 (2024.9.5)
  • C++高阶
  • 哈希--哈希桶
  • wordpress主题开发框架(灵狐框架),开发文档使用教程
  • Docker 搭建 PlantUML 服务:高效生成 UML 图的最佳实践
  • 算法-动态规划二
  • Day38 | 1365. 有多少小于当前数字的数字、941. 有效的山脉数组、1207. 独一无二的出现次数、283. 移动零、189. 轮转数组
  • shell脚本一键安装docker+docker-compose,支持x86_64、arm64双架构
  • 桑福德·韦尔策划美国捷运公司收购南美银行案例分析
  • 数组子序列比较的SIMD优化
  • 购物网站页面设计/新网站快速收录
  • 邢台网站定制/北京seo人员
  • 用dw做网站图片的基本尺寸/网址域名注册
  • wordpress三合一主题/怎么优化自己公司的网站
  • 网站建设摊销几年/怎样宣传自己的产品
  • 网站开发/网站优化的方法有哪些