华为云MaaS LLM+Opencode实现华为云基础设施自动化开通与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/
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项目
- 点赞
- 收藏
- 关注作者
评论(0)