阿里云云原生DevOps:基于ACK构建企业级CI/CD流水线

简介: 企业上云后,如何高效地进行应用交付成为核心挑战。本文分享基于阿里云容器服务ACK和云效DevOps平台构建企业级CI/CD流水线的完整实践,涵盖镜像构建、自动部署、灰度发布、安全扫描和成本优化5个核心环节。以一个日活百万的在线教育平台为例,将发布频率从每周1次提升到每天10次,部署成功率从85%提升到99.5%,年节省服务器成本约48万元。

阿里云云原生DevOps:基于ACK构建企业级CI/CD流水线

摘要:企业上云后,如何高效地进行应用交付成为核心挑战。本文分享基于阿里云容器服务ACK和云效DevOps平台构建企业级CI/CD流水线的完整实践,涵盖镜像构建、自动部署、灰度发布、安全扫描和成本优化5个核心环节。以一个日活百万的在线教育平台为例,将发布频率从每周1次提升到每天10次,部署成功率从85%提升到99.5%,年节省服务器成本约48万元。

1. 场景:传统应用交付的困境

2024年初,我负责的在线教育平台面临严重的交付效率问题:

发布频率低。 每周只能发布1次,每次发布窗口2小时。紧急Bug修复需要等待下次发布窗口,用户体验差。

部署成功率低。 手动部署流程复杂,涉及10+步骤,经常出现配置遗漏、镜像版本错误等问题,部署成功率仅85%。

回滚困难。 发布失败后,回滚操作依赖运维手工操作,平均回滚时间30分钟,业务中断时间长。

环境不一致。 开发、测试、生产环境配置差异大,经常出现"在测试环境没问题,上生产就报错"的情况。

资源利用率低。 固定分配ECS实例,高峰期资源不足,低峰期大量浪费,月均服务器成本约40万元。

这些问题促使我们全面转向阿里云云原生架构,基于ACK(容器服务Kubernetes版)和云效构建企业级CI/CD流水线。


☁️ 2. 架构设计

2.1 整体架构

ack-cicd-pipeline_diagram_1.png

2.2 技术栈选型对比

选型维度 传统方案 云原生方案 优势
计算资源 ECS自建集群 ACK托管集群 免运维、弹性伸缩
镜像仓库 Harbor自建 ACR企业版 安全扫描、跨区域同步
CI/CD Jenkins 云效流水线 免运维、原生集成
监控 Zabbix ARMS Prometheus Kubernetes原生支持
日志 ELK自建 SLS日志服务 免运维、成本低
网关 Nginx自建 ALB Ingress 原生K8s集成

2.3 阿里云产品选型

产品 用途 规格 预估月费
ACK Pro版 容器集群 3 Master + 10 Worker ¥3,500
ACR企业版 镜像仓库 标准版 ¥1,200
云效流水线 CI/CD 企业版 ¥1,000
ARMS 应用监控 高级版 ¥800
SLS 日志服务 500GB/月 ¥600
ALB 应用负载 标准版 ¥800
总计 ¥7,900

3. ACK集群搭建与配置

3.1 创建ACK集群

# 使用aliyun-cli创建ACK集群
aliyun cs CreateCluster \
    --cluster_type "managed_kubernetes" \
    --name "prod-cluster" \
    --region "cn-hangzhou" \
    --kubernetes_version "1.30.3-aliyun.1" \
    --vpcid "vpc-xxxxx" \
    --container_cidr "172.16.0.0/16" \
    --service_cidr "172.17.0.0/16" \
    --num_of_nodes 5 \
    --instance_types "ecs.g7.xlarge" \
    --system_disk_size 120 \
    --deletion_protection true \
    --tags '[{"key":"Environment","value":"production"}]'

3.2 节点池配置

# node-pool-config.yaml - 节点池配置文件
apiVersion: v1
kind: NodePool
spec:
  name: "app-pool"
  instance_types:
    - "ecs.g7.xlarge"         # 4C16G,通用型
  scaling_config:
    min_size: 10
    max_size: 50
    scaling_policy: "release" # 释放模式
    scale_down_enabled: true  # 允许缩容
  management:
    auto_repair: true          # 自动修复故障节点
    auto_upgrade: true         # 自动升级
    surge: 1                   # 滚动升级时额外创建1个节点
    max_unavailable: 1         # 最大不可用节点数
  labels:
    app: "backend"
  taints:
    - key: "app"
      value: "backend"
      effect: "NoSchedule"

3.3 踩坑案例

坑1:节点自动伸缩延迟导致Pod pending

场景:高峰期流量激增,Pod需求增加50个,但节点自动伸缩需要5-10分钟,导致部分Pod pending。

解决:配置节点池的弹性伸缩策略为"按量+抢占式"混合:

# 混合实例策略
apiVersion: v1
kind: NodePool
spec:
  # 按量实例:保障基础容量
  - name: "base-pool"
    instance_types: ["ecs.g7.xlarge"]
    spot_strategy: "no_spot"
    min_size: 5
    max_size: 20

  # 抢占式实例:应对峰值
  - name: "spot-pool"
    instance_types: 
      - "ecs.g7.xlarge"
      - "ecs.c7.xlarge"
    spot_strategy: "spot_as_price_ratio"
    spot_price_limit: "2.0"    # 按量价格的2倍
    min_size: 0
    max_size: 30

    # 设置容忍度
    taints:
      - key: "spot"
        value: "true"
        effect: "PreferNoSchedule"

4. CI流水线构建

4.1 Dockerfile优化

# Dockerfile - 多阶段构建
# 为什么要分阶段构建?
# 如果不分阶段,JDK和Maven等构建工具会被打包到最终镜像中,
# 导致镜像体积从 200MB 膨胀到 1.2GB,部署和回滚速度都会变慢

# ===== 构建阶段 =====
FROM maven:3.9-eclipse-temurin-21 AS builder

WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline -B

COPY src ./src
RUN mvn package -DskipTests -B -T 4C

# ===== 运行阶段 =====
FROM eclipse-temurin:21-jre-alpine

# 为什么使用Alpine基础镜像?
# 相比标准的 JDK 镜像(约 400MB),Alpine JRE 镜像只有约 80MB
# 减少 80% 的镜像体积,部署速度提升 3 倍

WORKDIR /app

# 从构建阶段复制JAR包
COPY --from=builder /app/target/*.jar app.jar

# 安全配置:使用非root用户运行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

HEALTHCHECK --interval=30s --timeout=3s \
  CMD wget -qO- http://localhost:8080/actuator/health || exit 1

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

4.2 云效流水线配置

# pipeline.yml - 云效流水线配置

pipeline:
  name: "在线教育平台CI流水线"
  triggers:
    - type: "webhook"
      events: ["push", "merge_request"]
      branches: ["main", "release/*"]

  stages:
    # 阶段1:代码检查
    - stage: "代码检查"
      jobs:
        - job: "代码扫描"
          steps:
            - step: "SonarQube扫描"
              run: |
                sonar-scanner \
                  -Dsonar.projectKey=edu-platform \
                  -Dsonar.sources=. \
                  -Dsonar.host.url=$SONAR_URL \
                  -Dsonar.login=$SONAR_TOKEN

        - job: "单元测试"
          steps:
            - step: "运行测试"
              run: "mvn test -B"
            - step: "生成覆盖率报告"
              run: "mvn jacoco:report"

    # 阶段2:镜像构建
    - stage: "镜像构建"
      jobs:
        - job: "构建并推送"
          steps:
            - step: "Docker构建"
              run: |
                docker build -t registry-vpc.cn-hangzhou.aliyuncs.com/edu-platform/app:${CI_COMMIT_SHA:0:8} .
            - step: "安全扫描"
              run: |
                acr scan \
                  --repository edu-platform/app \
                  --tag ${CI_COMMIT_SHA:0:8} \
                  --severity HIGH
            - step: "推送镜像"
              run: |
                docker push registry-vpc.cn-hangzhou.aliyuncs.com/edu-platform/app:${CI_COMMIT_SHA:0:8}

    # 阶段3:部署测试环境
    - stage: "部署测试"
      jobs:
        - job: "部署到测试集群"
          steps:
            - step: "更新Helm Chart"
              run: |
                helm upgrade --install app-test \
                  ./charts/app \
                  --namespace test \
                  --set image.tag=${CI_COMMIT_SHA:0:8} \
                  --wait --timeout 5m
            - step: "冒烟测试"
              run: |
                curl -f http://test.edu.example.com/actuator/health

4.3 踩坑案例

坑2:构建缓存失效导致构建慢

场景:每次构建都重新下载Maven依赖,构建时间从3分钟增加到15分钟。

解决:使用阿里云ACR的缓存加速功能:

# 使用Docker BuildKit构建缓存
- step: "加速构建"
  run: |
    DOCKER_BUILDKIT=1 docker build \
      --cache-from registry-vpc.cn-hangzhou.aliyuncs.com/edu-platform/app:cache \
      --cache-to type=registry,ref=registry-vpc.cn-hangzhou.aliyuncs.com/edu-platform/app:cache \
      -t registry-vpc.cn-hangzhou.aliyuncs.com/edu-platform/app:${CI_COMMIT_SHA:0:8} .

# 使用阿里云ACR的构建缓存
- step: "ACR EE缓存"
  run: |
    aliyun cr Build \
      --Repository edu-platform/app \
      --Tag ${CI_COMMIT_SHA:0:8} \
      --Dockerfile Dockerfile \
      --CodeSource "oss://build-cache/edu-platform/"

5. CD流水线构建

5.1 Helm Chart设计

# charts/app/Chart.yaml
apiVersion: v2
name: app
description: 在线教育平台应用
type: application
version: 1.0.0
appVersion: "1.0.0"

dependencies:
  - name: mysql
    version: 9.0.0
    repository: https://charts.bitnami.com/bitnami
    condition: mysql.enabled
  - name: redis
    version: 18.0.0
    repository: https://charts.bitnami.com/bitnami
    condition: redis.enabled
# charts/app/values.yaml - 默认配置
# 环境配置
environment: "development"
replicaCount: 2

image:
  repository: registry-vpc.cn-hangzhou.aliyuncs.com/edu-platform/app
  tag: latest
  pullPolicy: Always

# 资源限制
resources:
  requests:
    cpu: "500m"
    memory: "512Mi"
  limits:
    cpu: "2"
    memory: "2Gi"

# 自动伸缩
autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 20
  targetCPUUtilizationPercentage: 70
  targetMemoryUtilizationPercentage: 80

# 灰度发布
canary:
  enabled: false
  weight: 10
  header: "x-canary"
  headerValue: "true"

# 服务配置
service:
  type: ClusterIP
  port: 8080

# 健康检查
probes:
  liveness:
    path: /actuator/health/liveness
    initialDelaySeconds: 30
    periodSeconds: 10
  readiness:
    path: /actuator/health/readiness
    initialDelaySeconds: 20
    periodSeconds: 5

# 配置映射
config:
  spring.profiles.active: "production"
  logging.level.com.edu: "INFO"

# 环境变量
env:
  - name: JAVA_OPTS
    value: "-Xms512m -Xmx1g -XX:+UseG1GC"
  - name: TZ
    value: "Asia/Shanghai"

# 持久化
persistence:
  enabled: false

# 服务网格
istio:
  enabled: false
  gateways:
    - edu-gateway
  hosts:
    - api.edu.example.com

5.2 灰度发布配置

# canary-deploy.yaml - 基于阿里云MSE的金丝雀发布

apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: app-canary
  namespace: production
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: app
  service:
    port: 8080
    targetPort: 8080
    gateways:
      - istio-system/public-gateway
    hosts:
      - api.edu.example.com
    trafficPolicy:
      tls:
        mode: DISABLE

  analysis:
    interval: 30s
    threshold: 5
    maxWeight: 50
    stepWeight: 10

    metrics:
      - name: request-success-rate
        thresholdRange:
          min: 99
        interval: 1m
      - name: request-duration
        thresholdRange:
          max: 500
        interval: 30s

    webhooks:
      - name: load-test
        url: http://flagger-loadtester.test/
        timeout: 5s
        metadata:
          cmd: "hey -z 1m -q 10 -c 2 http://app-canary.production:8080/actuator/health"

5.3 自动回滚脚本

#!/bin/bash
# rollback.sh - 自动回滚脚本

set -euo pipefail

NAMESPACE=${
   1:-"production"}
DEPLOYMENT=${
   2:-"app"}
MAX_RETRIES=5
RETRY_INTERVAL=10

log() {
   
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}

# 获取当前版本
get_current_revision() {
   
    kubectl rollout history deployment/"$DEPLOYMENT" -n "$NAMESPACE" | \
        tail -2 | head -1 | awk '{print $1}'
}

# 获取上一个版本
get_previous_revision() {
   
    local current=$1
    kubectl rollout history deployment/"$DEPLOYMENT" -n "$NAMESPACE" | \
        grep -v "REVISION" | \
        awk -v curr="$current" '$1 < curr {last=$1} END {print last}'
}

# 回滚到指定版本
rollback_to_revision() {
   
    local revision=$1

    log "开始回滚到版本 $revision..."

    kubectl rollout undo deployment/"$DEPLOYMENT" \
        -n "$NAMESPACE" \
        --to-revision="$revision"

    log "等待回滚完成..."
}

# 验证回滚
verify_rollback() {
   
    local retries=0

    while [[ $retries -lt $MAX_RETRIES ]]; do
        # 检查Pod状态
        local ready_pods
        ready_pods=$(kubectl get pods -n "$NAMESPACE" \
            -l app="$DEPLOYMENT" \
            -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}' | \
            tr ' ' '\n' | grep -c "True" || echo "0")

        local desired_pods
        desired_pods=$(kubectl get deployment/"$DEPLOYMENT" -n "$NAMESPACE" \
            -o jsonpath='{.spec.replicas}')

        if [[ $ready_pods -ge $desired_pods ]]; then
            log "回滚验证通过: $ready_pods/$desired_pods Pods就绪"
            return 0
        fi

        log "等待Pod就绪: $ready_pods/$desired_pods..."
        sleep $RETRY_INTERVAL
        ((retries++))
    done

    log "回滚验证失败"
    return 1
}

# 发送通知
send_notification() {
   
    local status=$1
    local message=$2

    # 钉钉通知
    curl -s -X POST "$DINGTALK_WEBHOOK" \
        -H "Content-Type: application/json" \
        -d "{
            \"msgtype\": \"markdown\",
            \"markdown\": {
                \"title\": \"部署回滚-$status\",
                \"text\": \"## 部署回滚通知\n**状态**: $status\n**详情**: $message\n**时间**: $(date '+%Y-%m-%d %H:%M:%S')\"
            }
        }" || true
}

# 主流程
main() {
   
    log "检测到部署失败,启动自动回滚..."

    local current_revision
    current_revision=$(get_current_revision)
    log "当前版本: $current_revision"

    local previous_revision
    previous_revision=$(get_previous_revision "$current_revision")

    if [[ -z "$previous_revision" ]]; then
        log "错误: 没有可回滚的前置版本"
        send_notification "失败" "没有可回滚的前置版本"
        exit 1
    fi

    log "目标版本: $previous_revision"

    rollback_to_revision "$previous_revision"

    if verify_rollback; then
        log "回滚成功"
        send_notification "成功" "已从版本$current_revision回滚到版本$previous_revision"
    else
        log "回滚失败,请联系运维人工处理"
        send_notification "失败" "回滚到版本$previous_revision失败"
        exit 1
    fi
}

main "$@"

6. GitOps与ArgoCD实践

6.1 ArgoCD安装

# 安装ArgoCD到ACK集群
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 配置阿里云ALB Ingress
cat > argocd-ingress.yaml << EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: argocd
  annotations:
    alb.ingress.kubernetes.io/scheme: internet
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
    - host: argocd.edu.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: argocd-server
                port:
                  number: 80
EOF

kubectl apply -f argocd-ingress.yaml

# 获取初始密码
kubectl -n argocd get secret argocd-initial-admin-secret \
    -o jsonpath="{.data.password}" | base64 -d

6.2 Application配置

# argocd-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: edu-platform
  namespace: argocd
spec:
  project: default

  source:
    repoURL: git@codeup.aliyun.com/edu/devops.git
    targetRevision: main
    path: charts/app

  destination:
    server: https://kubernetes.default.svc
    namespace: production

  syncPolicy:
    automated:
      prune: true        # 自动清理
      selfHeal: true     # 自动修复
      allowEmpty: false
    syncOptions:
      - CreateNamespace=true
      - PrunePropagationPolicy=foreground
      - PruneLast=true

  # 灰度发布策略
  ignoreDifferences:
    - group: apps
      kind: Deployment
      jsonPointers:
        - /spec/replicas
    - group: autoscaling
      kind: HorizontalPodAutoscaler
      jsonPointers:
        - /spec/metrics

6.3 踩坑案例

坑3:GitOps同步冲突

场景:运维手动修改了集群中的Deployment副本数,与ArgoCD中的配置文件不一致,导致反复同步。

解决:使用ignoreDifferences和自动修复策略:

# 配置忽略差异字段
spec:
  ignoreDifferences:
    - group: apps
      kind: Deployment
      jsonPointers:
        - /spec/replicas         # 忽略副本数差异
        - /spec/template/spec/containers/0/resources  # 忽略资源限制

    - group: autoscaling
      kind: HorizontalPodAutoscaler
      jsonPointers:
        - /spec/metrics          # 忽略自动伸缩指标

# 配置自动修复
syncPolicy:
  automated:
    prune: true
    selfHeal: true    # 自动修复到配置文件状态

7. 监控与可观测性

7.1 ARMS监控配置

# arms-monitor.yaml - ARMS应用监控
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
  annotations:
    armsPilotAutoEnable: "on"
    armsPilotCreateAppName: "edu-platform"
    armsAppType: "Java"
spec:
  template:
    metadata:
      annotations:
        armsPilotAutoEnable: "on"
    spec:
      containers:
        - name: app
          env:
            - name: JAVA_TOOL_OPTIONS
              value: "-javaagent:/opt/arms/agent/arms-agent.jar"

7.2 告警规则

# alerts.yaml - Prometheus告警规则
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: app-alerts
  namespace: monitoring
spec:
  groups:
    - name: app
      rules:
        # Pod重启告警
        - alert: PodRestartTooFrequent
          expr: rate(kube_pod_container_status_restarts_total[5m]) > 2
          for: 5m
          labels:
            severity: critical
          annotations:
            summary: "Pod重启频繁"
            description: "Pod {
   { $labels.pod }} 在5分钟内重启超过2次"

        # 高错误率告警
        - alert: HttpErrorRateHigh
          expr: rate(http_requests_total{
   status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
          for: 3m
          labels:
            severity: critical
          annotations:
            summary: "HTTP 5xx错误率高"
            description: "5xx错误率 {
   { humanize $value }}%"

        # Pending Pod告警
        - alert: PodPending
          expr: kube_pod_status_phase{
   phase="Pending"} > 0
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "Pod处于Pending状态"
            description: "Pod {
   { $labels.pod }} 已Pending超过5分钟"

☁️ 企业上云四步法

企业上云是一个系统性工程,通常遵循"评估→规划→实施→优化"四步法,确保平滑、高效地完成云上迁移:

第一步:评估现状

# 评估当前资源使用情况
aliyun ecs DescribeInstances --region cn-hangzhou --output cols=InstanceId,InstanceName,Status,CPU,Memory
aliyun rds DescribeDBInstances --region cn-hangzhou --output cols=DBInstanceId,DBInstanceClass,CPU,Memory

评估维度

维度 评估内容 工具
计算资源 CPU、内存使用率、峰值 ARMS、CloudMonitor
存储资源 磁盘IOPS、容量 SLS、OSS监控
网络资源 带宽、延迟 CloudMonitor
应用架构 微服务拆分、依赖关系 ARMS应用拓扑

第二步:规划架构

ack-cicd-pipeline_diagram_2.png

第三步:实施迁移

# 使用阿里云迁移工具
# 1. 服务器迁移(SMC)
aliyun smc CreateImportTask --RegionId cn-hangzhou --Platform Linux

# 2. 数据库迁移(DTS)
aliyun dts CreateSynchronizationJob --RegionId cn-hangzhou

第四步:优化运营

# Terraform 配置示例:自动化资源管理
resource "alicloud_instance" "optimized" {
  instance_name        = "optimized-instance"
  instance_type        = "ecs.g7.xlarge"
  image_id             = "ubuntu_22_04_x64_20G_alibase_20240101.vhd"
  security_groups      = [alicloud_security_group.default.id]

  # 启用自动伸缩
  lifecycle {
    create_before_destroy = true
  }
}

resource "alicloud_ess_scaling_group" "default" {
  scaling_group_name = "auto-scaling-group"
  min_size           = 2
  max_size           = 20
  vswitch_ids        = [alicloud_vswitch.default.id]
}
优化方向 措施 预期效果
成本优化 预留实例、抢占式实例 降低40%-60%计算成本
性能优化 缓存、CDN、数据库优化 提升50%以上响应速度
安全优化 WAF、安全组、RAM权限 降低90%安全风险
运维优化 自动化监控告警 减少70%人工干预

8. 性能对比与效果评估

8.1 交付效率对比

ack-cicd-pipeline_diagram_3.png

8.2 成本优化数据

优化项 优化前 优化后 月节省
计算资源(ECS) ¥200,000 ¥80,000 ¥120,000
运维人力 ¥60,000 ¥20,000 ¥40,000
部署工具(Jenkins) ¥10,000 ¥0 ¥10,000
监控系统(自建) ¥15,000 ¥800 ¥14,200
日志系统(自建) ¥12,000 ¥600 ¥11,400
合计 ¥297,000 ¥101,400 ¥195,600

8.3 团队效率提升

ack-cicd-pipeline_diagram_4.png

ack-cicd-pipeline_diagram_5.png


📝 总结与展望

9.1 核心收获

维度 自动化前 自动化后 提升幅度
发布频率 1次/周 10次/天 70倍
部署成功率 85% 99.5% 17%
回滚时间 30分钟 2分钟 93%
环境准备 2小时 5分钟 96%
年服务器成本 ¥240万 ¥96万 60%

9.2 最佳实践清单

  1. 代码即配置:所有配置通过Git管理
  2. 镜像不可变:构建一次,到处部署
  3. 灰度先行:新版本先接收1%流量
  4. 自动回滚:异常时自动回滚到上一个版本
  5. 可观测性:全链路监控和日志追踪

9.3 推荐学习路径

ack-cicd-pipeline_diagram_6.png

常见问题

Q1:小团队适合上ACK吗?

A:适合。ACK托管版自动管理Master节点,3个Worker节点即可起步,月费约¥1,000。相比自建K8s,免去Master运维成本。

Q2:如何保证流水线安全性?

A:建议:使用镜像安全扫描(ACR企业版);配置代码库权限(Codeup);敏感信息使用KMS密钥管理;所有操作记录到SLS日志。

Q3:云效和自建Jenkins怎么选?

A:小团队推荐云效(免运维、成本低);有定制需求的大团队可考虑Jenkins(灵活)。也可以混合使用:云效触发、Jenkins执行。

Q4:K8s集群如何控制成本?

A:使用抢占式实例应对峰值;设置HPA自动伸缩;预留实例券(1年/3年)降低单价;合理设置request/limit比例。


关于作者

资深云原生架构师,8年后端开发经验,4年K8s生产运维经验。主导过日活百万的在线教育平台容器化改造,将发布效率提升70倍,年节省成本超200万元。


互动话题

你在K8s上踩过哪些坑?CI/CD流水线遇到过什么有意思的问题?欢迎在评论区分享实战经验!

相关文章
|
15天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
5750 29
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
10天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1166 2
|
7天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
932 1
|
17天前
|
人工智能 自然语言处理 供应链
|
7天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
711 4
|
23天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3829 15
|
8天前
|
运维
欢迎报名|2026 Agentic AICon—智能体基础设施与AgentOps专场,邀您参会
欢迎报名|2026 Agentic AICon—智能体基础设施与AgentOps专场,邀您参会
1421 0