华为云MaaS LLM+Opencode实现华为云基础设施自动化开通与CICD流水线自动化构建

举报
华为云社区精选 发表于 2026/05/28 18:01:58 2026/05/28
【摘要】 一、方案概述本方案基于 OpenCode 通过AI辅助实现应用项目开发与CI/CD平台的自动化构建,方案覆盖了从代码开发、仓库配置、流水线定义,到基础设施即代码(IaC)、容器镜像管理及K8S 集群部署的全流程关键环节。二、应用场景和价值本方案利用 OpenCode +LLM模型 自动生成 GitLab-CI 和 Terraform代码,实现华为云基础设施自动化开通与CICD流水线自动化构建...

一、方案概述

本方案基于 OpenCode 通过AI辅助实现应用项目开发与CI/CD平台的自动化构建,方案覆盖了从代码开发、仓库配置、流水线定义,到基础设施即代码(IaC)、容器镜像管理及K8S 集群部署的全流程关键环节。

二、应用场景和价值

本方案利用 OpenCode +LLM模型 自动生成 GitLab-CI 和 Terraform代码,实现华为云基础设施自动化开通与CICD流水线自动化构建,为Agent执行提供即开即用、资源隔离的沙箱环境。

三、技术栈组件

容器引擎: CCE(华为云云容器引擎)

容器镜像仓库: SWR(华为云容器镜像服务)

代码托管: GitLab

CI/CD引擎: GitLab CI/CD、runner

安全漏洞扫描: SonarQube

基础设施管理: Terraform

四、方案架构示意图


五、核心流程和实施步骤

5.1 Opencode的安装与华为云MaaS LLM接入

Opencode安装请参考官方文档:https://opencode.ai/docs/

华为云 MaaS API 配置 Opencode

5.2 AI生成Iac代码和CICD脚本

输入如下提示词,生成配置文件信息和脚本代码:

角色设定:

你是一位拥有10年经验的DevOps架构师,精通GitLab
CI/CD、Terraform、Docker以及华为云容器服务(CCE、SWR、VPC)。你擅长编写基础设施即代码(IaC)脚本和自动化部署流水线。

任务目标:

请为我设计一套完整的自动化CI/CD解决方案。该方案需实现从代码提交到GitLab后,自动触发基础设施创建(使用Terraform)和应用部署(使用GitLab
CI)的全流程。

具体需求拆解:

1.  基础设施即代码(IaC)部分(Terraform):

    \*   编写Terraform脚本,用于在华为云上自动开通以下资源:

        \*   网络:创建VPC、子网和安全组。

        \*   容器引擎:创建CCE集群(包含必要的节点池配置)。

        \*   镜像仓库:创建SWR实例及相关的组织/仓库权限配置。

    \*  
脚本需包含provider配置、resource定义以及必要的variables和outputs。

2.  GitLab Runner自动化注册:

    \*  提供在 ECS 实例上自动注册 GitLab Runner 的方案。

\*  确保 Runner 能够连接到 GitLab 实例,并配置好相关的 Tag(如
shell-runner 或 docker-runner)。

3.  CI/CD流水线设计(.gitlab-ci.yml):

    \*   编写.gitlab-ci.yml文件,包含以下阶段(Stages):

        \* Lint:执行后端PMD与前端ESLint代码静态检查。

\* Build:编译后端JAR包及前端静态资源文件。

\* Test:运行后端单元测试。

\* SonarQube:执行后端代码质量与安全扫描分析。

\* Build-Image:构建前后端Docker镜像并推送到华为云SWR仓库(需处理登录认证)。

\* Deploy:使用kubectl或Helm将应用部署到CCE集群。

\* Cleanup:清理旧镜像。

    \*   流水线需包含必要的变量定义(如REGISTRY_URL, CLUSTER_NAME等)。

4.  自动化触发逻辑:

    \*   说明如何将Terraform的执行集成到GitLab
CI中(例如:代码合并到main分支后,先触发Terraform
Apply创建资源,再进行应用部署)。

输出要求:

\*   请分模块提供代码示例:Terraform配置、GitLab
Runner安装/注册脚本、.gitlab-ci.yml内容。

\*   对关键配置项(如华为云认证、SWR登录、CCE连接)进行注释说明。

\*   如果涉及敏感信息(如密码、Token),请使用环境变量占位符代替。

Opencode思考过程,进行需求的分析和梳理


AI 生成的项目目录结构


在当前项目目录下,OpenCode自动生成了如下配置文件:

config.yaml              #全局配置文件
.gitlab-ci.yml           #GitLab CI/CD 流水线 配置文件
deploy.sh                #CICD自动化流程执行入口脚本
terraform                #华为云资源terraform配置文件
k8s                      #华为云CCE K8S集群配置文件
install-gitlab.sh        #部署gitlab的安装脚本

全局配置文件

config文件作为全局参数配置文件,集中定义了系统所需的各类关键变量。其内容涵盖:

  • 华为云认证凭证(AK/SK)
  • GitLab 及 Runner 的主机地址与鉴权信息
  • CCE 集群规格参数
  • SWR组织归属
  • 应用部署配置(包括前后端镜像名称、Pod 副本数及数据库密码等)

config.yaml 文件示例:

# ------------------------------------------------------------
# 1. 华为云配置 (用于创建 CCE + SWR)
# ------------------------------------------------------------
huaweicloud:
# 华为云 Access Key (从 https://console.huaweicloud.com/iam 获取)
access_key: "xxxxxxxxx"

# 华为云 Secret Key
secret_key: "xxxxxxxxxx"

# 区域 (如 cn-north-4, cn-east-3 等)
region: "cn-south-1"

# 项目ID (从我的凭证页面获取)
project_id: "xxxxxxxxxxxxxxxx"

# ------------------------------------------------------------
# 2. GitLab 配置 (自建)
# ------------------------------------------------------------
gitlab:
# GitLab 服务器 IP
host: "xxxxxxxxxx"
port: 80
root_password: "xxxxxxxxx"

# 项目名
project_name: "hrms"
project_description: "HRMS 企业人事管理系统"
default_branch: "main"
token: "xxxxxxxxxxxxxxxxxxx"
# Runner 服务器 IP (可以是另一台服务器)
ip: "xxxxxxxxx"
port: 22
username: "root"
password: "xxxxxxx.."

runner_token: "xxxxxxxx"
# ------------------------------------------------------------
# 4. CCE 集群配置
# ------------------------------------------------------------
cce:
# 集群名称
cluster_name: "hrms-cluster"

# 集群规格 (tGeneral, tLarge, sLarge, cce-node)
flavor: "tGeneral"

# 集群版本 (v1.23, v1.25, v1.27, v1.29)
version: "v1.27"

# VPC 名称 (留空则自动创建)
vpc_name: "hrms-vpc"

# 子网名称 (留空则自动创建)
subnet_name: "hrms-subnet"

# 节点数量
node_count: 2

# 节点规格 (可选,默认使用集群规格)
node_flavor: ""

# ------------------------------------------------------------
# 5. SWR 镜像仓库配置
# ------------------------------------------------------------
swr:
# 组织名称 
org_name: "hrms"

# 镜像仓库命名空间
namespace: "hrms"

# ------------------------------------------------------------
# 6. 应用配置
# ------------------------------------------------------------
app:
# 应用名称
app_name: "hrms"

# 后端镜像名
backend_image: "hrms-backend"
# 前端镜像名
frontend_image: "hrms-frontend"

# 后端暴露端口
backend_port: 8080
frontend_port: 80

# 副本数
replicas: 2

# 数据库密码 (将创建为 Secret)
db_password: "YourSecureDBPassword123"
# Redis 密码
redis_password: "YourSecureRedisPassword123"
# ------------------------------------------------------------
# 7. 部署环境配置
# ------------------------------------------------------------
deploy:
# 命名空间
namespace: "hrms"

# 开发环境配置
dev:
enable: true

# 生产环境配置
prod:
enable: true

5.3 部署与配置Gitlab

5.3.1 部署 GitLab

OpenCode 执行部署脚本install-gitlab.sh,完成gitlab 环境和组件的安装,

会在指定IP上自动完成了gitlab容器的启动,如图所示


获取gitlab默认的鉴权信息登录密码:

docker exec -it gitlab grep \'Password:\' /etc/gitlab/initial_root_password

登录gitlab页面,进入个人访问令牌页面,生成access token(授权API读写访问和write_repository的权限)


将生成的token配置到 config.yaml 文件中,后续opencode推送本地代码至gitlab 代码仓需要用到这个tokens。

5.3.2 初始化Gitlab仓库和安装并注册Gitlab Runner

OpenCode 执行deploy.sh部署脚本,自动化完成Git仓库的初始化、创建Git项目、推送代码、配置CI/CD变量和Gitlab Runner的安装注册


控制台可以看到项目已创建、代码已提交


在目标服务器上进行gitlab-runner的安装和注册


去控制台检查下runner是否成功创建


在服务器上检查git-runner程序是否正常启动


可以看到控制台和服务器上git-runner的安装和注册都成功完成。

5.3.3 安装SonarQube(可选)

SonarQube是代码质量管理平台,与 CI/CD 流水线(如 GitLab CI、Jenkins)或 IDE(如 VS Code、IntelliJ IDEA)深度集成,以实现"安全左移"和自动化质量门禁。

需要安装SonarQube Server 和数据库(PostgreSQL),这里我手动安装了。

1、创建安装目录

mkdir -p /opt/sonarqube-deploy
cd /opt/sonarqube-deploy

2、 创建必要的目录用于挂载数据

mkdir -p sonarqube/data sonarqube/logs sonarqube/extensions
mkdir -p postgresql/data

3、使用 vim 创建配置文件: vim docker-compose.yml

代码如下:

version: '3.8'
services:
  db:
    image: postgres:15-alpine  # 使用轻量级且稳定的 Postgres 15
    container_name: sonar-db
    environment:
      POSTGRES_USER: sonar     # 数据库用户名
      POSTGRES_PASSWORD: sonar # 数据库密码(生产环境请改复杂点)
      POSTGRES_DB: sonar       # 数据库名
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data # 数据持久化
    networks:
      - sonar-net
    restart: always

  sonarqube:
    image: sonarqube:10.6.0-community # 使用 10.6 社区版 (LTS)
    container_name: sonarqube-server
    depends_on:
      - db 
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
      SONAR_WEB_JAVAOPTS: -Xmx512m -Xms128m
    volumes:
      - ./sonarqube/data:/opt/sonarqube/data
      - ./sonarqube/logs:/opt/sonarqube/logs
      - ./sonarqube/extensions:/opt/sonarqube/extensions
    ports:
      - "9000:9000" # 映射端口
    networks:
      - sonar-net
    restart: always

# 定义网络
networks:
  sonar-net:
    driver: bridge

启动服务:

docker-compose up -d

登录sonarqub控制台,在My Account中生成token,如图所示


在gitlab配置sonarqub 的 URL和token变量:


5.4 Terraform 自动化创建华为云资源服务

生成了terraform 代码文件目录,如图所示


main.tf文件:

terraform {
  required_version = ">= 0.13"

  required_providers {
    huaweicloud = {
      source  = "huaweicloud/huaweicloud"
      version = "= 1.87.0"
    }
  }
}

# ============================================================
# Provider 配置
# ============================================================

provider "huaweicloud" {
  region     = var.region
  access_key = var.access_key
  secret_key = var.secret_key
}

# ============================================================
# 数据源 (查找已有资源)
# ============================================================

data "huaweicloud_vpc" "existing" {
  name = var.existing_vpc_name
}

data "huaweicloud_vpc_subnet" "existing" {
  name   = var.existing_subnet_name
  vpc_id = data.huaweicloud_vpc.existing.id
}

data "huaweicloud_networking_secgroup" "existing" {
  name = var.existing_secgroup_name
}

# ============================================================
# CCE 集群
# ============================================================

resource "huaweicloud_cce_cluster" "this" {
  name      = var.cluster_name
  flavor_id = var.cluster_flavor

  vpc_id    = data.huaweicloud_vpc.existing.id
  subnet_id = data.huaweicloud_vpc_subnet.existing.id

  container_network_type = "vpc-router"
  kube_proxy_mode        = "iptables"

  enterprise_project_id = var.enterprise_project_id

  tags = {
    Project    = "HRMS"
    Managed_by = "terraform"
    env        = "prod"
  }
}

# ============================================================
# CCE 节点池
# ============================================================

resource "huaweicloud_cce_node_pool" "this" {
  cluster_id = huaweicloud_cce_cluster.this.id
  name       = "default-pool"

  subnet_id = data.huaweicloud_vpc_subnet.existing.id

  os                 = "EulerOS 2.9"
  initial_node_count = var.node_count
  flavor_id          = var.node_flavor

  availability_zone = var.availability_zone

  password = var.cce_node_password

  security_groups = [data.huaweicloud_networking_secgroup.existing.id]

  runtime = "containerd"

  scall_enable             = true
  min_node_count           = 1
  max_node_count           = 10
  scale_down_cooldown_time = 100
  priority                 = 1

  root_volume {
    size       = 40
    volumetype = "SAS"
  }

  data_volumes {
    size       = 100
    volumetype = "SAS"
  }

  tags = {
    Project    = "HRMS"
    Managed_by = "terraform"
  }
}

# ============================================================
# CCE 插件 - metrics-server
# ============================================================

resource "huaweicloud_cce_addon" "metrics_server" {
  cluster_id    = huaweicloud_cce_cluster.this.id
  template_name = "metrics-server"
}

# ============================================================
# SWR 组织
# ============================================================

resource "huaweicloud_swr_organization" "this" {
  name = var.org_name
}

resource "huaweicloud_swr_repository" "backend" {
  organization = huaweicloud_swr_organization.this.name
  name         = var.backend_image
  category     = "app_server"
}

resource "huaweicloud_swr_repository" "frontend" {
  organization = huaweicloud_swr_organization.this.name
  name         = var.frontend_image
  category     = "app_server"
}

# ============================================================
# 输出
# ============================================================

output "cluster_id" {
  description = "CCE Cluster ID"
  value       = huaweicloud_cce_cluster.this.id
}

output "used_vpc_id" {
  description = "VPC ID"
  value       = data.huaweicloud_vpc.existing.id
}

output "used_subnet_id" {
  description = "Subnet ID"
  value       = data.huaweicloud_vpc_subnet.existing.id
}

output "used_security_group_id" {
  description = "Security Group ID"
  value       = data.huaweicloud_networking_secgroup.existing.id
}

output "swr_org_name" {
  description = "SWR Organization Name"
  value       = huaweicloud_swr_organization.this.name
}

output "swr_endpoint" {
  description = "SWR Endpoint"
  value       = "swr.${var.region}.huaweicloud.com"
}

云资源创建过程

OpenCode 使用terraform创建开通华为云资源,Plan阶段,展示场景的资源规格,进行核对检查


确认资源没错,输入确认,OpenCode 完成云资源的开通和创建。

自动完成terraform apply的执行过程:


云资源创建成功


华为云SWR资源已经创建,我们在控制台检查资源创建成功


华为云CCE资源已经创建,我们在控制台检查资源创建成功


配置KUBECONFIG参数到Gitlab

登录华为云CCE控制台,获取kubeconfig信息,用于连接管理CCE集群的鉴权信息。如图所示:


下载kubeconfig 文件:


在gitlab 配置KUBECONFIG参数,gitlab会通过该参数连接CCE集群,部署应用。


5.5 触发流水线

代码提交,会在gitlab触发流水线的自动执行,gitlab-runner会解析ci.yml文件。
分别执行代码静态检查、编译、单元测试、安全扫描和质量检查、镜像制作和推送、部署CCE集群多个任务流。

流水线执行成功:


SonarQube 界面看到整体综合质量评估结果


质量门禁通过,无安全风险,符合发布标准

5.6 项目访问

在CCE控制台可以看到,服务已经正常部署到CCE集群了


通过service访问hrms项目

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。