什么是自动化 CI/CD自动化 CI/CD是现代软件开发中的核心实践它代表持续集成 (Continuous Integration)和持续交付 (Continuous Delivery)或持续部署 (Continuous Deployment)。其目标是自动化软件构建、测试和发布流程以更快、更可靠地交付高质量的软件。持续集成 (CI)核心思想开发人员频繁地将代码变更合并到共享的主干分支如main或master。自动化过程每次代码提交push都会触发一个自动化的构建和测试流程。这包括编译代码如果需要。运行单元测试、集成测试等。执行代码质量检查如静态代码分析。目标尽早发现集成错误和代码缺陷确保主干分支始终处于可工作状态。持续交付 (CD)核心思想确保代码在经过 CI 流程验证后始终处于可随时发布到生产环境的状态。自动化过程在 CI 构建成功后自动执行额外的步骤将应用打包成可部署的产物如容器镜像、安装包并部署到一个或多个类似生产环境的预备环境如staging进行更严格的测试如端到端测试、性能测试。目标实现快速、低风险的发布能力。最终的生产环境部署通常需要手动触发审批。持续部署 (CD)核心思想持续交付流程的延伸。在通过所有测试后代码变更自动部署到生产环境无需人工干预。目标实现最快的反馈循环将新功能、修复以最短时间交付给最终用户。这需要极高的自动化测试覆盖率和流程可靠性。简单总结CI/CD 通过自动化工具链将代码从开发者的电脑经过构建、测试、打包最终安全、快速地交付到用户手中生产环境。CI 关注的是“代码合进来没问题”CD 关注的是“打包好的应用随时能发布”或“自动发布出去”。自动化 CI/CD 入门手册第一步理解基础概念 (已完成)明确 CI、CD 的定义和区别。理解自动化是核心。第二步选择一个版本控制系统 (VCS)必备工具CI/CD 的源头是代码变更。你需要一个 VCS 来管理代码。主流选择Git配合 GitHub, GitLab, Bitbucket, Azure DevOps 等平台。第三步了解 CI/CD 的关键组件CI/CD 服务器/平台执行自动化流程的核心引擎。常见选项云托管GitHub Actions, GitLab CI/CD, Bitbucket Pipelines, Azure Pipelines, CircleCI, Travis CI。自托管Jenkins, Drone CI, Tekton。入门推荐GitHub Actions如果你用 GitHub或 GitLab CI/CD如果你用 GitLab。它们集成度高易于上手。配置文件定义 CI/CD 流程步骤的脚本文件。位置通常存放在代码仓库的根目录或特定文件夹下如.github/workflows/对于 GitHub Actions。内容使用 YAML 格式最常见或其他 DSL如 Jenkinsfile编写描述在什么事件如push触发后执行哪些任务如build,test,deploy。构建工具/脚本用于编译代码、管理依赖、打包应用。语言相关Maven/Gradle (Java), npm/Yarn (JavaScript), pip (Python), dotnet CLI (.NET), Makefile (C/C) 等。容器化Docker 是打包应用及其依赖的流行方式常与 CI/CD 结合。测试框架运行自动化测试。类型单元测试、集成测试、端到端测试等。框架JUnit (Java), pytest (Python), Jest (JavaScript), RSpec (Ruby) 等。部署目标你的应用最终要运行的环境。类型服务器、虚拟机、云平台AWS, Azure, GCP、容器编排平台Kubernetes、Serverless 平台等。第四步搭建第一个简单的 CI 流程目标在每次代码提交时自动运行测试。选择一个 CI/CD 平台例如 GitHub Actions。创建配置文件在 GitHub 仓库中创建.github/workflows/ci.yml。编写基础配置name: Continuous Integration on: [push] # 触发事件代码推送 jobs: build-and-test: runs-on: ubuntu-latest # 运行环境 steps: - name: Checkout code uses: actions/checkoutv3 # 检出代码到工作目录 - name: Set up Node.js uses: actions/setup-nodev3 with: node-version: 18 # 设置 Node.js 环境 - name: Install dependencies run: npm install # 安装依赖 - name: Run tests run: npm test # 运行测试脚本如 Jest提交并推送将此文件提交并推送到你的仓库。观察执行在 GitHub 的Actions标签页下你会看到工作流被触发运行。如果测试失败你会收到通知。第五步扩展流程 - 加入持续交付目标在测试通过后自动构建应用并部署到预备环境。构建产物在 CI 流程成功测试通过后添加构建步骤。... - name: Build application run: npm run build # 构建命令生成静态文件或可执行文件部署到预备环境添加部署步骤。这通常需要配置访问目标环境的凭据如 API Key, Token。示例 (部署到 Vercel/Netlify)可以使用它们提供的 GitHub Action。- name: Deploy to Staging uses: amondnet/vercel-actionv20 with: vercel-token: ${{ secrets.VERCEL_TOKEN }} # 使用 GitHub Secrets 存储敏感信息 vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} scope: your-team alias: staging.your-app.com # 预备环境域名重要务必使用平台的Secrets功能如 GitHub Secrets来安全地存储和使用凭据不要硬编码在配置文件中第六步进阶 - 持续部署 (可选)目标在预备环境测试通过后自动部署到生产环境。前提拥有极其可靠的自动化测试覆盖率高、稳定并且团队接受自动化发布。实现在 CI/CD 流程中增加生产环境部署步骤。设置触发条件例如当代码被推送到main分支且预备环境部署后的自动化验收测试通过时自动触发生产部署。# 在 CI 流程成功后可能还需要一个单独的 CD 流程 name: Continuous Deployment to Production on: workflow_run: workflows: [Continuous Integration] # 依赖 CI 流程 types: - completed jobs: deploy-prod: if: ${{ github.event.workflow_run.conclusion success }} # 只在 CI 成功时运行 runs-on: ubuntu-latest steps: - name: Deploy to Production uses: amondnet/vercel-actionv20 with: vercel-token: ${{ secrets.VERCEL_TOKEN }} ... # 其他生产环境配置 alias: your-app.com # 生产环境域名第七步最佳实践与注意事项保持快速反馈CI 流程构建 测试应该尽可能快几分钟内完成避免阻塞开发。一切皆自动化构建、测试、部署、基础设施配置IaC都应脚本化、自动化。版本化CI/CD 配置文件、部署脚本、基础设施代码都应纳入版本控制。安全第一使用Secrets管理凭据。最小化权限原则只授予 CI/CD 执行所需的最小权限。扫描依赖项是否存在漏洞。监控与告警监控 CI/CD 管道的执行状态和时长。失败时及时告警。渐进式采用从简单的 CI自动化测试开始逐步扩展到 CD/CD。不要试图一步到位。环境一致性确保开发、预备、生产环境尽可能一致容器化是常用手段。回滚策略具备快速回滚到前一版本的能力。第八步学习资源官方文档GitHub Actions, GitLab CI/CD, Jenkins的文档。书籍《Continuous Delivery》、《The DevOps Handbook》
自动化 CI/CD 的入门手册
什么是自动化 CI/CD自动化 CI/CD是现代软件开发中的核心实践它代表持续集成 (Continuous Integration)和持续交付 (Continuous Delivery)或持续部署 (Continuous Deployment)。其目标是自动化软件构建、测试和发布流程以更快、更可靠地交付高质量的软件。持续集成 (CI)核心思想开发人员频繁地将代码变更合并到共享的主干分支如main或master。自动化过程每次代码提交push都会触发一个自动化的构建和测试流程。这包括编译代码如果需要。运行单元测试、集成测试等。执行代码质量检查如静态代码分析。目标尽早发现集成错误和代码缺陷确保主干分支始终处于可工作状态。持续交付 (CD)核心思想确保代码在经过 CI 流程验证后始终处于可随时发布到生产环境的状态。自动化过程在 CI 构建成功后自动执行额外的步骤将应用打包成可部署的产物如容器镜像、安装包并部署到一个或多个类似生产环境的预备环境如staging进行更严格的测试如端到端测试、性能测试。目标实现快速、低风险的发布能力。最终的生产环境部署通常需要手动触发审批。持续部署 (CD)核心思想持续交付流程的延伸。在通过所有测试后代码变更自动部署到生产环境无需人工干预。目标实现最快的反馈循环将新功能、修复以最短时间交付给最终用户。这需要极高的自动化测试覆盖率和流程可靠性。简单总结CI/CD 通过自动化工具链将代码从开发者的电脑经过构建、测试、打包最终安全、快速地交付到用户手中生产环境。CI 关注的是“代码合进来没问题”CD 关注的是“打包好的应用随时能发布”或“自动发布出去”。自动化 CI/CD 入门手册第一步理解基础概念 (已完成)明确 CI、CD 的定义和区别。理解自动化是核心。第二步选择一个版本控制系统 (VCS)必备工具CI/CD 的源头是代码变更。你需要一个 VCS 来管理代码。主流选择Git配合 GitHub, GitLab, Bitbucket, Azure DevOps 等平台。第三步了解 CI/CD 的关键组件CI/CD 服务器/平台执行自动化流程的核心引擎。常见选项云托管GitHub Actions, GitLab CI/CD, Bitbucket Pipelines, Azure Pipelines, CircleCI, Travis CI。自托管Jenkins, Drone CI, Tekton。入门推荐GitHub Actions如果你用 GitHub或 GitLab CI/CD如果你用 GitLab。它们集成度高易于上手。配置文件定义 CI/CD 流程步骤的脚本文件。位置通常存放在代码仓库的根目录或特定文件夹下如.github/workflows/对于 GitHub Actions。内容使用 YAML 格式最常见或其他 DSL如 Jenkinsfile编写描述在什么事件如push触发后执行哪些任务如build,test,deploy。构建工具/脚本用于编译代码、管理依赖、打包应用。语言相关Maven/Gradle (Java), npm/Yarn (JavaScript), pip (Python), dotnet CLI (.NET), Makefile (C/C) 等。容器化Docker 是打包应用及其依赖的流行方式常与 CI/CD 结合。测试框架运行自动化测试。类型单元测试、集成测试、端到端测试等。框架JUnit (Java), pytest (Python), Jest (JavaScript), RSpec (Ruby) 等。部署目标你的应用最终要运行的环境。类型服务器、虚拟机、云平台AWS, Azure, GCP、容器编排平台Kubernetes、Serverless 平台等。第四步搭建第一个简单的 CI 流程目标在每次代码提交时自动运行测试。选择一个 CI/CD 平台例如 GitHub Actions。创建配置文件在 GitHub 仓库中创建.github/workflows/ci.yml。编写基础配置name: Continuous Integration on: [push] # 触发事件代码推送 jobs: build-and-test: runs-on: ubuntu-latest # 运行环境 steps: - name: Checkout code uses: actions/checkoutv3 # 检出代码到工作目录 - name: Set up Node.js uses: actions/setup-nodev3 with: node-version: 18 # 设置 Node.js 环境 - name: Install dependencies run: npm install # 安装依赖 - name: Run tests run: npm test # 运行测试脚本如 Jest提交并推送将此文件提交并推送到你的仓库。观察执行在 GitHub 的Actions标签页下你会看到工作流被触发运行。如果测试失败你会收到通知。第五步扩展流程 - 加入持续交付目标在测试通过后自动构建应用并部署到预备环境。构建产物在 CI 流程成功测试通过后添加构建步骤。... - name: Build application run: npm run build # 构建命令生成静态文件或可执行文件部署到预备环境添加部署步骤。这通常需要配置访问目标环境的凭据如 API Key, Token。示例 (部署到 Vercel/Netlify)可以使用它们提供的 GitHub Action。- name: Deploy to Staging uses: amondnet/vercel-actionv20 with: vercel-token: ${{ secrets.VERCEL_TOKEN }} # 使用 GitHub Secrets 存储敏感信息 vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} scope: your-team alias: staging.your-app.com # 预备环境域名重要务必使用平台的Secrets功能如 GitHub Secrets来安全地存储和使用凭据不要硬编码在配置文件中第六步进阶 - 持续部署 (可选)目标在预备环境测试通过后自动部署到生产环境。前提拥有极其可靠的自动化测试覆盖率高、稳定并且团队接受自动化发布。实现在 CI/CD 流程中增加生产环境部署步骤。设置触发条件例如当代码被推送到main分支且预备环境部署后的自动化验收测试通过时自动触发生产部署。# 在 CI 流程成功后可能还需要一个单独的 CD 流程 name: Continuous Deployment to Production on: workflow_run: workflows: [Continuous Integration] # 依赖 CI 流程 types: - completed jobs: deploy-prod: if: ${{ github.event.workflow_run.conclusion success }} # 只在 CI 成功时运行 runs-on: ubuntu-latest steps: - name: Deploy to Production uses: amondnet/vercel-actionv20 with: vercel-token: ${{ secrets.VERCEL_TOKEN }} ... # 其他生产环境配置 alias: your-app.com # 生产环境域名第七步最佳实践与注意事项保持快速反馈CI 流程构建 测试应该尽可能快几分钟内完成避免阻塞开发。一切皆自动化构建、测试、部署、基础设施配置IaC都应脚本化、自动化。版本化CI/CD 配置文件、部署脚本、基础设施代码都应纳入版本控制。安全第一使用Secrets管理凭据。最小化权限原则只授予 CI/CD 执行所需的最小权限。扫描依赖项是否存在漏洞。监控与告警监控 CI/CD 管道的执行状态和时长。失败时及时告警。渐进式采用从简单的 CI自动化测试开始逐步扩展到 CD/CD。不要试图一步到位。环境一致性确保开发、预备、生产环境尽可能一致容器化是常用手段。回滚策略具备快速回滚到前一版本的能力。第八步学习资源官方文档GitHub Actions, GitLab CI/CD, Jenkins的文档。书籍《Continuous Delivery》、《The DevOps Handbook》