Google Cloud Build 无法运行受影响的 NX:应用程序,因为它无法引用 master~1 提交

5 git nrwl google-cloud-build nrwl-nx

我正在尝试建立一个使用 nx.dev 开发的 monorepo 完整 CI/CD 管道,在其中我仅构建和部署在提交中已更改的应用程序和服务。

我的云构建链接到我的 github 存储库,当推送更改时,它会启动构建。首先 npm install 然后构建更改的应用程序。

根据 nx 上的 nrwls 文档https://nx.dev/guides/monorepo-affected#ci他们说使用

npm run affected:build -- --base=origin/master~1 --head=origin/master
Run Code Online (Sandbox Code Playgroud)

这会将当前提交与之前的提交进行比较,以找出要构建哪些服务或应用程序。

我尝试过使用它,但在云构建中运行时出现此错误

Step #1: fatal: Not a valid object name master~1
Step #1: Command failed: git merge-base master~1 master
Step #1: fatal: Not a valid object name master~1
Run Code Online (Sandbox Code Playgroud)

当使用 cloud-build-local 在本地构建它时,它工作正常并成功地确定要构建哪些服务。

我认为它失败的原因是因为当 cloud build 检查 git 存储库时,它只检查提交,而不检查以前的提交信息。因此它无法引用先前的提交。

有什么办法可以解决这个问题还是我错过了什么?

谢谢!

Leo*_*ley 2

您也许可以用表达式来做到这一点。

npm run affected:build -- --base=$(git rev-parse HEAD~1) --head=origin/master
Run Code Online (Sandbox Code Playgroud)

这就是我如何使用 github actions 来做到这一点

name: Test develop and feature branches

on:
  push:
    branches:
      - develop
      - "feature/*"

jobs:
  test:
    name: Test
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1

      - name: Use node.js 12
        uses: actions/setup-node@v1
        with:
          node-version: 12

      - name: Cache Yarn
        uses: actions/cache@v1
        with:
          path: node_modules
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.OS }}-yarn-${{ env.cache-name }}-
            ${{ runner.os }}-yarn-

      - name: Yarn install
        run: yarn install --frozen-lockfile --non-interactive

      - name: Retreive last test sha
        id: last-test-sha
        run: |
          if [[ $GITHUB_BASE_REF ]]
          then
            echo "::set-output name=sha::remotes/origin/$GITHUB_BASE_REF"
          else
            echo "::set-output name=sha::$(git rev-parse HEAD~1)"
          fi

      - name: Run affected tests
        run: yarn affected:test --ci --runInBand --base=${{ steps.last-test-sha.outputs.sha }} --head=${GITHUB_SHA}
        env:
          CI: "true"
          TZ: "utc"


Run Code Online (Sandbox Code Playgroud)