软件开发进阶技能之 DevOps 工程体系(二)

简介: 本文系统讲解CI/CD全流程:涵盖CI流水线核心阶段(检出、缓存、测试、构建、镜像、集成测试等),GitHub Actions与Jenkins实战示例;CD/CD部署策略(环境链、门禁、蓝绿/金丝雀)、ArgoCD GitOps实践及数据库迁移(Flyway)方案,助力高效可靠交付。

第二部分:持续集成(CI)流水线设计

持续集成要求开发者频繁(每日多次)将代码合并到主干,并通过自动化构建与测试快速发现集成错误。

一、 CI 流水线的核心阶段

一个典型的 CI 流水线包含以下阶段:

代码检出(Checkout)

依赖缓存(Cache Dependencies)

静态分析(Lint, Format)

单元测试(Unit Tests)

编译/打包(Build)

镜像构建(Container Image Build)

集成测试(Integration Tests)

制品上传(Artifact Upload)

二、使用 GitHub Actions 构建 CI 流水线

以下示例为 Java Spring Boot 项目的完整 CI。

name: Java CI with Maven

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${
  { github.repository }}

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

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

    - name: Cache Maven dependencies
      uses: actions/cache@v3
      with:
        path: ~/.m2
        key: ${
  { runner.os }}-m2-${
  { hashFiles('**/pom.xml') }}
        restore-keys: ${
  { runner.os }}-m2

    - name: Run unit tests with coverage
      run: mvn -B test jacoco:report

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3
      with:
        file: ./target/site/jacoco/jacoco.xml

    - name: Build JAR
      run: mvn -B package -DskipTests

    - name: Upload artifact
      uses: actions/upload-artifact@v3
      with:
        name: app-jar
        path: target/*.jar

    - name: Build Docker image
      run: docker build -t ${
  { env.REGISTRY }}/${
  { env.IMAGE_NAME }}:${
  { github.sha }} .

    - name: Log into GitHub Container Registry
      run: echo "${
  { secrets.GITHUB_TOKEN }}" | docker login ${
  { env.REGISTRY }} -u ${
  { github.actor }} --password-stdin

    - name: Push image
      run: docker push ${
  { env.REGISTRY }}/${
  { env.IMAGE_NAME }}:${
  { github.sha }}

三、依赖缓存策略

加速 CI 的关键:缓存依赖包(Maven .m2、npm node_modules、Go mod 等)。

Maven 缓存示例(GitLab CI 风格):

cache:
  paths:
    - .m2/repository
  key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"

四、并行化与矩阵策略
大型项目可拆分测试套件并行执行。

jobs:
  test:
    strategy:
      matrix:
        node-version: [16.x, 18.x]
        os: [ubuntu-latest, windows-latest]
    steps:
      - uses: actions/setup-node@v3
        with:
          node-version: ${
  { matrix.node-version }}
      - run: npm test

第三部分:持续交付与持续部署(CD/CD)

CD 使每个通过 CI 的制品都能自动部署到类生产环境,并最终一键或自动推向生产。

一、部署流水线设计模式

环境链:开发环境(dev) → 测试环境(staging) → 生产环境(prod)

门禁:手动批准(生产环境)、自动化测试通过率、性能基线。

部署策略:滚动更新、蓝绿部署、金丝雀发布、A/B 测试。

二、基于 ArgoCD 的 GitOps 实践

GitOps 将 Git 作为声明式基础设施和应用的单一事实来源。ArgoCD 是 Kubernetes 上的 GitOps 控制器。

# application.yaml (ArgoCD Application 定义)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp-staging
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/myapp-config
    targetRevision: staging
    path: overlays/staging
  destination:
    server: https://kubernetes.default.svc
    namespace: myapp-staging
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true

工作流:

开发者修改应用代码,CI 构建镜像并推送到镜像仓库。

在 Git 配置 meimanke.cn 仓库中更新 kustomization.yaml 或 values.yaml 中的镜像 Tag。

ArgoCD 检测到 Git 变更(每 3 分钟或通过 Webhook),自动同步到 Kubernetes 集群。

三、Jenkins Pipeline 示例(Declarative Pipeline)
Jenkins 仍是广泛使用的 CI/CD 工具,尤其适合复杂的企业环境。

pipeline {
    agent any
    environment {
        DOCKER_REGISTRY = 'registry.example.com'
        APP_NAME = 'order-service'
    }
    stages {
        stage('Checkout') {
            steps { checkout scm }
        }
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            parallel {
                stage('Unit Tests') {
                    steps { sh 'mvn test' }
                }
                stage('Integration Tests') {
                    steps { sh 'mvn verify -Pintegration' }
                }
            }
        }
        stage('Build Image') {
            steps {
                script {
                    docker.build("${DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER}")
                }
            }
        }
        stage('Push to Registry') {
            steps {
                script {
                    docker.withRegistry("https://${DOCKER_REGISTRY}", 'docker-credentials') {
                        docker.image("${DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER}").push()
                    }
                }
            }
        }
        stage('Deploy to Staging') {
            steps {
                sh "kubectl set image deployment/${APP_NAME} ${APP_NAME}=${DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER} -n staging"
                sh "kubectl rollout status deployment/${APP_NAME} -n staging"
            }
        }
        stage('Smoke Test') {
            steps {
                sh "curl -f https://staging.example.com/health || exit 1"
            }
        }
        stage('Deploy to Production') {
            when { branch 'main' }
            input { message "Deploy to production?" ok "Deploy" }
            steps {
                sh "kubectl set image deployment/${APP_NAME} ${APP_NAME}=${DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER} -n prod"
            }
        }
    }
    post {
        failure {
            slackSend channel: '#alerts', message: "Build failed: ${env.JOB_NAME} - ${env.BUILD_URL}"
        }
    }
}

四、数据库变更的持续交付

处理数据库迁移(Schema changes)是 CD 中的难点。推荐使用 Flyway 或 Liquibase,将迁移脚本与应用版本绑定。

Flyway 集成到 Spring Boot:

-- src/main/resources/db/migration/V1__create_order_table.sql
CREATE TABLE orders (
    id UUID PRIMARY KEY,
    user_id UUID NOT NULL,
    amount DECIMAL(19,2) NOT NULL,
    status VARCHAR(20) NOT NULL,
    created_at TIMESTAMP
);
# application.yml
spring:
  flyway:
    enabled: true
    baseline-on-migrate: true
    locations: classpath:db/migration

在 CD 流水线中,应用启动前自动执行迁移(或使用独立的 Flyway 容器任务)。

相关文章
|
20天前
|
运维 Serverless API
零门槛部署 DeepSeek 模型方案实测:4种方式全体验与避坑指南
DeepSeek-R1 作为当前热门的推理模型,在数学、代码和自然语言等复杂任务上表现出色。阿里云推出的"零门槛、轻松部署您的专属 DeepSeek 模型"解决方案,提供了 4 种不同维度的使用方式:百炼 API 调用、函数计算 Serverless 部署、容器服务集群部署和 GPU 云服务器手动部署。本文从实际体验出发,逐一走通 4 条路径,记录部署过程中的踩坑经历、文档准确性和成本分析,最终给出不同场景下的最佳选择推荐。
|
22天前
|
存储 人工智能 自然语言处理
Skills实战:从0到1封装一个“登录鉴权”Skill,拿来即用
本文直击AI Agent落地痛点——登录鉴权失效、状态丢失、提示词不可靠。提出以“Skill”替代传统提示词工程:将动态认证逻辑(如Token获取/刷新/存储)封装为可复用、带状态管理的代码模块,实现跨会话稳定调用。实战拆解Skill四要素,揭示其如何让AI“一次登录,全程无忧”。
|
20天前
|
缓存 人工智能 自然语言处理
阿里云百炼通义千问Qwen3.6-Flash完整实操指南:轻量化旗舰功能特性、落地优势与分层优惠订阅方案详解
当前AI应用落地场景分化愈发明显,除复杂智能体、百万字长文档、全栈大型工程开发等高门槛业务外,大量企业存在高频轻量问答、实时客服对话、短文本批量生成、简单数据提取、前端实时交互等标准化轻量化需求。这类场景单日调用频次可达数万乃至数十万次,对接口响应延迟、单轮调用成本、并发承载能力有极高要求,若选用高规格旗舰模型会造成算力预算严重浪费,而普通基础轻量化模型又存在逻辑推理弱、工具调用不稳定、短文本输出质量差等短板。
301 4
|
21天前
|
人工智能 缓存 运维
阿里云百炼通义千问Qwen3.7-Plus完整指南:全维度功能特性、落地优势与优惠订阅方案实操手册
AI应用规模化落地进程中,绝大多数企业与开发者面临性能与成本难以平衡的核心难题:轻量化模型推理、图文解析、长文档处理能力不足,无法支撑中等复杂度智能体任务;旗舰级模型长期高频调用成本偏高,中小团队难以持续投入算力预算。依托自研通义千问技术体系打造的Qwen3.7-Plus,是阿里云百炼平台推出的中端全能型多模态大模型,精准填补轻量化模型与旗舰模型之间的市场空白,在保留百万级上下文、原生图文多模态、全链路工具调用、通用代码生成全套核心能力的基础上,大幅下调调用单价,适配个人开发者、小微创业团队、中小企业全层级使用需求。
511 1
|
NoSQL Java 关系型数据库
【AgentScope Java新手村系列】(5)记忆与会话管理
记忆与会话管理 — AgentState 管理上下文窗口,AgentStateStore 持久化,RuntimeContext.sessionId 隔离多用户会话。
240 0
|
20天前
|
存储 人工智能 算法
Claude Code自我进化系统解析:AI编程助手持久化记忆与行为学习实现方案
在日常使用Claude Code开展编程工作时,多数用户都会遇到一个普遍痛点:每开启一次全新会话,AI都会清空此前的对话内容、项目认知与个人编码习惯。此前沟通的项目架构、反复确认的代码规范、调试总结的经验教训都需要重新讲解,不仅耗费大量时间,还会降低整体开发效率。针对这一问题,业内技术团队基于Claude Code原生能力,搭建了一套完整的持久化记忆与自我进化系统,让这款AI编程助手能够跨会话留存信息、自主学习用户行为规律,逐步适配个人与团队的开发模式。本文将完整拆解这套系统的整体架构、核心模块、技术实现、运行流程以及落地效果,同时讲解设计思路与优化细节,为AI编程工具的深度定制提供参考。
198 4
|
21天前
|
弹性计算 负载均衡 安全
阿里云负载均衡(SLB)从入门到精通:完整配置流程与最佳实践
本文详细讲解阿里云负载均衡(SLB)的完整配置流程,涵盖实例创建、服务器组配置、监听设置、健康检查、安全策略及优化实践,同时包含常见问题解答,帮助用户快速掌握SLB部署与运维核心技能。
|
21天前
|
SQL 人工智能 自然语言处理
开放语义模型:构建企业级数据语义层
过去二十年,企业围绕数据建设逐步形成了一套成熟的方法体系,形成了数据仓库(中台),通过BI和报表进行业务赋能。然而,在智能化时代,这些是远远不够的,现在的数据治理体系并不足以让AI真正理解企业业务。换句话说,不能被AI通过消耗Token方式消费的数据平台,是没有未来的。本文介绍另一种受到广泛关注的知识管理的方法,就是(逻辑)语义模型。
|
21天前
|
缓存 人工智能 运维
阿里云百炼Qwen3.7-Max全解:旗舰模型核心能力、技术优势与优惠订阅方案实操指南
AI智能体技术进入规模化落地阶段后,市场对大模型的长文本承载、多步骤自主推理、工具链式调用、全栈代码开发能力提出前所未有的高标准。传统轻量化对话模型仅能满足基础问答,无法支撑企业级长周期自动化任务、复杂软件工程、海量文档深度分析等高价值场景。阿里云依托自研通义千问技术体系,在百炼大模型服务平台正式推出Qwen3.7-Max旗舰大模型,作为当前千问3.7系列综合性能天花板,全面对标国际头部闭源旗舰模型,专为智能体全链路工作流深度优化,兼顾推理精度、并发稳定性、多模态理解与成本可控性,同时配套分层订阅优惠计划,覆盖个人开发者、小微团队、中大型集团企业全维度使用需求。本文将完整拆解Qwen3.7-M
323 1
|
21天前
|
缓存 人工智能 API
阿里云百炼Token Plan团队版与Coding Plan核心差异全解析 附团队版全场景常见问题完整答疑
随着大模型在研发、办公、企业自动化场景常态化落地,不同使用者群体的算力消耗特征出现明显分化:数十人多岗位协同的企业团队,存在多角色额度分配、跨业务线统一计费、月度预算锁定、高峰算力保障等综合管理需求;而独立程序员、外包开发小组、学生研发爱好者,绝大多数算力消耗集中在代码生成、调试、项目重构、脚本编写等开发场景,对文档分析、多模态图文处理需求极低,更看重轻量化低价订阅、代码专属折扣、编程工具配套权益。
230 0

热门文章

最新文章