在云原生时代,手动执行 mvn packagedocker buildkubectl apply 这套“组合拳”不仅消耗开发者的创造力,还极易因人为操作失误导致生产环境故障。将华为云 DevCloud 与 GitHub Actions 结合,利用 GitHub Actions 作为“胶水”串联云端资源,可以搭建一套零干预的自动化 CI/CD 流水线,实现从代码提交到生产环境更新的无缝衔接,特别适合资源有限但追求工程效能的小型团队,做到“30分钟配置,永久解放双手”。

以下是打造该自动化流水线的完整实战指南:

一、 工具链职责设计

在开始搭建流水线前,我们需要明确各工具的职责边界,使其各司其职:

  • 华为云 DevCloud (CloudBuild):负责提供可靠的企业级 Maven 云端构建环境。
  • 容器镜像服务 (SWR):作为私有镜像仓库,存储构建产物。
  • 云应用引擎 (CAE) / 云容器引擎 (CCE):提供生产级无服务器容器运行环境或 Kubernetes 集群。
  • GitHub Actions:扮演“胶水”角色,响应代码提交事件,将构建、推送、部署等服务串联成自动化工作流。

二、 环境准备与前提条件

在配置流水线前,需完成以下前置工作:

  1. 基础账号与服务:注册华为云账号并开通 DevCloud、SWR、CAE/CCE 服务;注册 GitHub 账号并创建代码仓库。
  2. 本地工具链验证:推荐本地配置 JDK 11+、Maven 3.6+ 以及 Docker 20.10+ 环境。
  3. 获取云端资源 ID:在华为云 CAE 控制台创建项目、环境、应用和组件,并记录相应的 Project ID、Region ID、Environment ID、Application ID 和 Component ID,以便后续部署调用。
  4. 区域规划:华为云 SWR 建议选择与 CAE/CCE 集群相同的区域(如华北-北京四),以避免跨区拉取镜像带来的网络延迟。

三、 配置 GitHub Actions 的 Secrets

为了安全地使用访问密钥等敏感信息,避免在配置文件中暴露明文,需要在 GitHub 仓库的 Settings > Secrets and variables > Actions 中配置以下 Repository secrets:

  • HUAWEI_SECRET_ACCESS_KEY:华为云的访问密钥 ID (AK)。
  • HUAWEI_SECRET_SECRET_KEY:访问密钥 ID 对应的访问密钥 (SK)。
  • HUAWEI_DOCKER_SECRET:SWR 容器镜像仓库的长期登录指令或密码。

配置完成后,GitHub Actions 在运行时即可通过 ${{ secrets.HUAWEI_SECRET_ACCESS_KEY }} 等方式安全获取敏感信息。

四、 编写零干预工作流文件

在代码仓库的 .github/workflows/ 目录下创建 YAML 工作流文件。以下为整合 DevCloud 企业级 Maven 构建与容器化部署的核心配置:


name: Java CI/CD Pipeline to Huawei Cloud

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      # 1. 检出代码
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. 企业级 Maven 构建打包
      - name: Set up JDK 11
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
          cache: maven
      
      - name: Build with Maven
        run: |
          mvn clean package -DskipTests
          cp target/*.jar docker/

      # 3. Docker 镜像构建与 SWR 登录
      - name: Build Docker image
        run: |
          cd docker
          docker build -t ${{ secrets.SWR_URL }}/${{ secrets.NAMESPACE }}/my-app:${{ github.sha }} .

      - name: Login to Huawei SWR
        run: |
          docker login -u ${{ secrets.REGION }}@${{ secrets.HUAWEI_SECRET_ACCESS_KEY }} \
          -p ${{ secrets.HUAWEI_DOCKER_SECRET }} \
          ${{ secrets.SWR_URL }}

      # 4. 推送镜像至私有仓库
      - name: Push to SWR
        run: |
          docker push ${{ secrets.SWR_URL }}/${{ secrets.NAMESPACE }}/my-app:${{ github.sha }}

      # 5. 下载并安装华为云 CLI
      - name: Install HuaweiCloud CLI
        run: |
          curl -sSL https://cn-north-4-hdn-koocli.obs.cn-north-4.myhuaweicloud.com/cli/latest/hcloud_install.sh -o ./hcloud_install.sh \
          && sudo bash ./hcloud_install.sh -y

      # 6. 配置华为云 CLI
      - name: Configure HuaweiCloud CLI
        run: |
          sudo hcloud configure set --cli-profile=testAKSK --cli-mode=AKSK \
          --cli-region=${{ secrets.REGION }} \
          --cli-access-key=${{ secrets.HUAWEI_SECRET_ACCESS_KEY }} \
          --cli-secret-key=${{ secrets.HUAWEI_SECRET_SECRET_KEY }} \
          --cli-project-id=${{ secrets.PROJECT_ID }}

      # 7. 部署到华为云 CAE
      - name: Deploy to CAE
        run: |
          echo y | sudo hcloud CAE ExecuteAction \
          --cli-region="${{ secrets.REGION }}" \
          --project_id="${{ secrets.PROJECT_ID }}" \
          --X-Enterprise-Project-ID="0" \
          --X-Environment-ID="${{ secrets.ENVIRONMENT_ID }}" \
          --application_id="${{ secrets.APPLICATION_ID }}" \
          --component_id="${{ secrets.COMPONENT_ID }}" \
          --api_version="v1" \
          --kind="Action" \
          --metadata.name="upgrade" \
          --metadata.annotations.version="${{ github.sha }}" \
          --spec.source.type="image" \
          --spec.source.url="${{ secrets.SWR_URL }}/${{ secrets.NAMESPACE }}/my-app:${{ github.sha }}"

五、 流水线运行机制解析

当开发人员将代码推送到主分支时,GitHub Actions 会自动触发上述工作流:

  1. 持续集成 (CI):流水线拉取代码后执行 Maven 构建指令,生成可部署的 JAR 包并拷贝至 Docker 目录,随后使用 Dockerfile 构建容器镜像。
  2. 镜像托管:通过先前配置的 Secrets 登录华为云 SWR,并为镜像打上标签推送到私有镜像仓库(如 swr.me-east-1.myhuaweicloud.com/demo-cae/cae-frontend:1.0.0)。
  3. 持续部署 (CD):CI 成功完成后,流水线自动下载并配置华为云 CLI (hcloud),随后调用 CAE 的 ExecuteAction 接口,将最新构建的镜像部署到指定的 CAE 环境中,并等待任务执行完成。除了使用 CLI,也可以直接使用官方提供的 huaweicloud/cae-deploy@main 插件来执行 CD 流程。

通过这套方案,开发团队可以彻底告别手动敲打运维命令的繁琐,将精力重新聚焦于业务代码的创新与交付。

更多推荐