CI/CD 基础知识
持续集成Continuous Integration (CI) + 持续交付Continuous Delivery (CD)
持续集成:软件开发团队成员经常整合他们各自的工作。
持续交付: 频繁地按照流水线生产软件,以确保软件可以随时可靠地发布。
我们为什么要使用 CI/CD?
• 可以随时获得最新的集成软件。
• 无需等待单个组件的开发完成。
• 在任何时候,您都可以看到软件开发的状态。
两个重要方面:
• 构建自动化
• 测试自动化
工作流程
• 工作流是您将定义的可配置自动化过程。
• 必须在存储库的.github/workflows
目录中定义工作流。
活动
• 事件是存储库中触发工作流运行的特定活动。
• 例如,事件可以是“拉取请求”或“将提交推送到主分支”
工作
• 作业是在同一运行器上执行的一组工作流步骤。
• 每个步骤要么是将要执行的shell 脚本,要么是将要运行的预定义操作。
运行
• 运行器是在触发时运行您的工作流的服务器。
• GitHub 提供Ubuntu Linux、Microsoft Windows 和macOS 运行器。
第 1 部分:设置
这部分是搭建自己的repository,了解repository中的代码。
第 1 步:克隆您的存储库
首先,将此存储库克隆到您的本地计算机.
第二步:看代码
src/main/java/example/project/Main.java
a class including a simple main function.
src/test/java/example/project/TestMain.java
a class including a simple test case for the main function.
pom.xml
a maven configuration file.
第 3 步:在本地计算机上运行 maven 命令(mvn package)
第 2 部分:GitHub CI/CD
在第 1 部分中,您确认项目使用给定的 maven 配置文件正确构建和测试。但是,您必须手动运行命令 mvn package 来确认这一点。现在,我们将使用 GitHub CI/CD 管道将其自动化。这意味着,只要满足特定的触发条件,预定义的工作流就会自动在 CI/CD 管道上运行,并会在出现任何问题时告诉您。
第 1 步:检查工作流程
我已经在模板存储库中创建了一个工作流程。工作流在 .github/workflows/maven.yml 中定义。让我们来看看吧。
name: Java CI with Maven
on:
push:
branches: [ "main" ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: 11
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package
第 2 步:更新工作流以在使用不同 JDK 的不同机器上运行
让我们更进一步。实际上,用户可能拥有不同的 JDK 版本是很常见的。我们想确保我们的代码是否可以在具有不同 JDK 的不同机器上正常运行。
(任务)我们想为不同的配置组合运行相同的工作流程。具体来说,两个 JDK 版本(11 和 17)和两种机器类型(Ubuntu 和 MacOS)。更新 .github/workflows/maven.yml 以实现此目的。最后,我们希望看到以下结果。
name: Java CI with Maven
on:
push:
branches: [ "main" ]
jobs:
build-and-test:
strategy:
matrix:
jdk_version: ['11', '17']
machine: ['ubuntu-latest', 'macos-latest']
runs-on: ${{ matrix.machine }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK ${{ matrix.jdk_version }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.jdk_version }}
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package