You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

简化Cloud Build获取GitHub Git历史命令,适配分支合并与手动部署

优化Cloud Build中NX单体仓库的Git历史获取配置

问题背景

需要在Cloud Build中获取完整Git历史,用于检测NX单体仓库中哪些应用发生了变更。当前配置包含冗余的Git分支操作,希望简化命令,同时适配main分支合并触发构建和手动部署两种场景。

当前冗余配置如下:

steps:
  - id: 'create github ssh configurations'
    name: 'gcr.io/cloud-builders/git'
    secretEnv: ['SSH_KEY']
    entrypoint: 'bash'
    args:
    - -c
    - |
      echo "$$SSH_KEY" >> /root/.ssh/id_rsa
      chmod 400 /root/.ssh/id_rsa
      cp known_hosts.github /root/.ssh/known_hosts
      git config --global user.email "a@b.com"
    volumes:
    - name: 'ssh'
      path: /root/.ssh

  - id: 'fetch more history'
    name: 'gcr.io/cloud-builders/git'
    script: |
      #!/usr/bin/env bash
      git remote set-url origin git@github.com:<user>/<repo>.git
      git fetch
      git checkout -b deploy-branch
      git add -A
      git commit -m "dep commit"
      git checkout main
      git pull
      git checkout deploy-branch
      git rebase main -X theirs
    volumes:
    - name: 'ssh'
      path: /root/.ssh

  - other steps


availableSecrets:
  secretManager:
  - versionName: projects/<>/secrets/<>/versions/latest
    env: 'SSH_KEY'

优化方案

核心优化思路

  1. 移除所有冗余的分支创建、提交、变基操作:Cloud Build触发时已处于目标分支(main或手动指定分支),无需额外分支操作。
  2. 仅保留必要的Git历史拉取操作,确保NX能获取足够的提交来检测变更。
  3. 添加分支判断逻辑,兼容手动部署场景。

优化后的完整配置

steps:
  - id: '配置GitHub SSH访问'
    name: 'gcr.io/cloud-builders/git'
    secretEnv: ['SSH_KEY']
    entrypoint: 'bash'
    args:
    - -c
    - |
      mkdir -p /root/.ssh
      echo "$SSH_KEY" > /root/.ssh/id_rsa
      chmod 400 /root/.ssh/id_rsa
      cp known_hosts.github /root/.ssh/known_hosts
      git config --global user.email "a@b.com"
    volumes:
    - name: 'ssh'
      path: /root/.ssh

  - id: '拉取完整Git历史'
    name: 'gcr.io/cloud-builders/git'
    script: |
      #!/usr/bin/env bash
      # 切换为SSH远程地址(替换为你的仓库地址)
      git remote set-url origin git@github.com:<user>/<repo>.git
      # 将浅克隆转为完整克隆,确保获取所有历史提交
      git fetch --unshallow --tags
      # 手动部署时,若当前分支不是main,拉取main分支的远程引用用于变更对比
      if [[ "$BRANCH_NAME" != "main" ]]; then
        git fetch origin main:refs/remotes/origin/main
      fi
    volumes:
    - name: 'ssh'
      path: /root/.ssh

  # 后续NX变更检测步骤示例
  - id: '检测NX变更应用'
    name: 'node:18'
    script: |
      #!/usr/bin/env bash
      npm install -g nx
      # 根据场景选择对应的affected命令
      if [[ "$BRANCH_NAME" == "main" ]]; then
        # main分支合并触发:对比当前提交与上一个提交的变更
        nx affected:apps --base=HEAD~1 --head=HEAD
      else
        # 手动部署:对比当前分支与main分支的变更
        nx affected:apps --base=origin/main --head=HEAD
      fi

availableSecrets:
  secretManager:
  - versionName: projects/<>/secrets/<>/versions/latest
    env: 'SSH_KEY'

配置说明

  • SSH配置步骤:简化了目录创建逻辑,确保.ssh目录存在,避免潜在报错。
  • Git历史拉取步骤:
    • git fetch --unshallow:解决Cloud Build默认浅克隆的问题,获取完整仓库历史,满足NX变更检测的需求。
    • 分支判断逻辑:手动部署时自动拉取main分支的远程引用,方便NX对比当前分支与main的差异。
  • NX变更检测步骤:根据触发场景自动选择对比基准,确保变更检测的准确性:
    • main分支合并触发时,对比当前提交与上一个提交的差异。
    • 手动部署时,对比当前分支与main分支的差异。

内容的提问来源于stack exchange,提问作者sev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:35:20