跳到主要内容

与Git平台CI/CD集成

随着前端项目的日益复杂,自动化部署成为了提升开发效率、保证代码质量的关键一环。腾讯云CloudBase(云开发)提供的静态托管服务,结合其强大的CLI工具,可以轻松实现前端项目的快速部署。本文将详细介绍如何利用CloudBase CLI工具,配合GitHub Actions、GitLab CI/CD和Gitee Go等主流Git平台的流水线能力,实现Git仓库中前端项目的自动部署到CloudBase静态托管服务。

一、CloudBase静态托管与CLI工具概述

CloudBase静态托管:云开发提供高性能、高可用的静态网站托管服务,支持自定义域名、CDN加速、HTTPS等功能,非常适合部署前端SPA应用、博客、文档站点等。

CloudBase CLI工具:云开发CLI(cloudbase-cli)是管理云开发资源、进行本地开发和部署的命令行工具。其中,静态托管相关的命令是实现自动化部署的关键。

在开始之前,请确保您已经:

  1. 创建了一个可用的云开发CloudBase环境,可前往云开发CloudBase控制台创建。
  2. 安装了Node.js环境。
  3. 全局安装了CloudBase CLI:npm install -g @cloudbase/cli
  4. 登录了CloudBase CLI:tcb login

二、核心部署命令

实现自动部署的核心命令是tcb hosting deploy。此命令用于将本地文件部署到CloudBase静态托管。

基本用法:

tcb hosting deploy [filePath] --envId [envId] --containerPath [containerPath]
  • filePath: 本地要部署的文件夹路径,通常是前端项目的distbuild目录。
  • --envId: 您的云开发环境ID。
  • --containerPath: 部署到云开发静态托管的路径,默认为/,表示部署到根目录。

示例:将当前目录下的dist文件夹部署到指定环境的静态托管根目录:

tcb hosting deploy dist --envId your-env-id

三、与Git平台CI/CD集成

下面将分别介绍如何与GitHub、GitLab和Gitee的CI/CD流水线集成。

1. GitHub Actions

GitHub Actions是GitHub提供的CI/CD服务,可以直接在GitHub仓库中配置工作流。

步骤1:获取CloudBase密钥

为了让GitHub Actions有权限部署到您的云开发环境,您需要获取腾讯云API密钥(SecretId和SecretKey)。

步骤2:在GitHub仓库中添加Secrets

在您的GitHub仓库中,依次点击 "Settings" -> "Secrets and variables" -> "Actions" -> "New repository secret"。 添加以下两个Secrets:

  • TCB_SECRET_ID: 您的腾讯云SecretId
  • TCB_SECRET_KEY: 您的腾讯云SecretKey
  • TCB_ENV_ID: 您的云开发环境ID

步骤3:创建GitHub Actions工作流文件

在您的项目根目录下创建 .github/workflows/deploy.yml 文件,内容如下:

name: Deploy to CloudBase Static Hosting

on:
push:
branches:
- main # 或 master,根据您的主分支名称

jobs:
build-and-deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '18' # 根据您的项目需求选择Node.js版本

- name: Install dependencies
run: npm install

- name: Build project
run: npm run build # 替换为您的项目构建命令

- name: Install CloudBase CLI
run: npm install -g @cloudbase/cli

- name: Deploy to CloudBase Static Hosting
env:
# TCB_SECRET_ID和TCB_SECRET_KEY会自动被CLI识别
TCB_SECRET_ID: ${{ secrets.TCB_SECRET_ID }}
TCB_SECRET_KEY: ${{ secrets.TCB_SECRET_KEY }}
run: |
tcb hosting deploy ./dist --envId ${{ secrets.TCB_ENV_ID }} --containerPath / # 替换 ./dist 为您的构建输出目录

说明

  • on: push: branches: [main]:当main分支有新的push时触发工作流。
  • npm run build:请替换为您项目实际的构建命令,例如yarn buildpnpm build等。
  • ./dist:请替换为您项目构建产物的目录,通常是builddist等。

2. GitLab CI/CD

GitLab CI/CD是GitLab内置的CI/CD服务,通过.gitlab-ci.yml文件进行配置。

步骤1:获取CloudBase密钥

同GitHub Actions,获取您的腾讯云API密钥(SecretId和SecretKey)。

步骤2:在GitLab项目中添加CI/CD变量

在您的GitLab项目中,依次点击 "Settings" -> "CI/CD" -> "Variables" -> "Add variable"。 添加以下变量:

  • TCB_SECRET_ID: 您的腾讯云SecretId (类型选择Variable)
  • TCB_SECRET_KEY: 您的腾讯云SecretKey (类型选择Variable)
  • TCB_ENV_ID: 您的云开发环境ID (类型选择Variable) 建议将它们标记为“Protected”和“Masked”以增加安全性。

步骤3:创建.gitlab-ci.yml文件

在您的项目根目录下创建 .gitlab-ci.yml 文件,内容如下:

stages:
- build
- deploy

variables:
# 设置Node.js版本
NODE_VERSION: '18'

build_project:
stage: build
image: node:${NODE_VERSION}-slim # 使用Node.js镜像
script:
- npm install
- npm run build # 替换为您的项目构建命令
artifacts:
paths:
- dist/ # 缓存构建产物,以便部署阶段使用
expire_in: 1 day # 缓存过期时间

deploy_to_cloudbase:
stage: deploy
image: node:${NODE_VERSION}-slim # 使用Node.js镜像
before_script:
- npm install -g @cloudbase/cli
script:
- tcb hosting deploy ./dist --envId $TCB_ENV_ID --containerPath / # 替换 ./dist 为您的构建输出目录
only:
- main # 或 master,根据您的主分支名称

说明

  • stages:定义了builddeploy两个阶段。
  • build_project:负责安装依赖和构建项目,并将构建产物缓存。
  • deploy_to_cloudbase:负责安装CloudBase CLI并执行部署命令。
  • $TCB_SECRET_ID$TCB_SECRET_KEY会自动被CLI识别,无需在命令中显式传递。
  • only: - main:只有main分支的push才会触发部署。

3. Gitee Go

Gitee Go是Gitee(码云)提供的CI/CD服务,配置方式与GitLab CI/CD类似,也是通过 .gitee/workflows/ 目录下的YAML文件进行配置。

步骤1:获取CloudBase密钥

同GitHub Actions,获取您的腾讯云API密钥(SecretId和SecretKey)。

步骤2:在Gitee项目中添加环境变量

在您的Gitee仓库中,依次点击 "管理" -> "WebHooks" -> "Gitee Go" -> "环境变量"。 添加以下环境变量:

  • TCB_SECRET_ID: 您的腾讯云SecretId
  • TCB_SECRET_KEY: 您的腾讯云SecretKey
  • TCB_ENV_ID: 您的云开发环境ID 勾选“敏感信息”以保护您的密钥。

步骤3:创建Gitee Go工作流文件

在您的项目根目录下创建 .gitee/workflows/deploy.yml 文件,内容如下:

name: Deploy to CloudBase Static Hosting

on:
push:
branches:
- master # 或 main,根据您的主分支名称

jobs:
build-and-deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '18' # 根据您的项目需求选择Node.js版本

- name: Install dependencies
run: npm install

- name: Build project
run: npm run build # 替换为您的项目构建命令

- name: Install CloudBase CLI
run: npm install -g @cloudbase/cli

- name: Deploy to CloudBase Static Hosting
env:
TCB_SECRET_ID: ${{ secrets.TCB_SECRET_ID }}
TCB_SECRET_KEY: ${{ secrets.TCB_SECRET_KEY }}
TCB_ENV_ID: ${{ secrets.TCB_ENV_ID }}
run: |
tcb hosting deploy ./dist --envId ${{ secrets.TCB_ENV_ID }} --containerPath / # 替换 ./dist 为您的构建输出目录

说明

  • Gitee Go的语法与GitHub Actions非常相似。
  • 环境变量可以直接通过secrets.TCB_SECRET_ID等方式访问,但需要在Gitee Go的环境变量中配置。
  • npm run build./dist请根据您的项目实际情况修改。

四、常见问题与注意事项

  1. 构建输出目录:务必确认您的前端项目构建后的静态文件输出目录,例如Vue CLI通常是dist,Create React App通常是build
  2. Node.js版本:根据您的项目要求选择合适的Node.js版本。
  3. 缓存依赖:在CI/CD流程中,可以考虑缓存node_modules,以加快后续构建速度。例如在GitHub Actions和GitLab CI/CD中都可以配置缓存。
  4. 环境变量安全性:将API密钥等敏感信息配置为CI/CD平台的Secrets或Protected Variables,切勿直接写入代码仓库。
  5. 部署失败排查:如果部署失败,请查看CI/CD流水线的日志输出,通常会有详细的错误信息。检查CloudBase CLI的输出、网络连接、权限配置等。
  6. containerPath:如果您的项目需要部署到静态托管的子目录,请正确设置--containerPath参数。例如,部署到/my-app目录:tcb hosting deploy ./dist --envId your-env-id --containerPath /my-app
  7. CloudBase CLI版本:确保CI/CD环境中安装的CloudBase CLI版本是最新的,以获取最新的功能和bug修复。
  8. 并行部署:如果您的CI/CD触发频繁,可能会导致CloudBase静态托管频繁更新,生产环境建议考虑PR合并到主分支后才触发部署。