使用 Github Actions 在 Vercel 上进行多个环境的部署

4
我们在Github为每个拉取请求设置了Vercel预览部署。 每次拉取请求时,代码都会部署到与不同后端耦合的Vercel test/acc/prod环境中。
对于每个拉取请求,我们想要针对它运行一些(Cypress)测试,但只针对Vercel测试环境进行测试。
我们通过使用deployment_status事件并指定仅在环境为测试时运行,使其正常工作。
jobs:
  cypress:
    if: github.event.deployment_status.environment == 'Preview – Test'

这将导致在 acc/prod 上跳过 Github 运行,并在测试环境中进行通过/失败测试。 然而,Github 仅列出 PR Github 检查中的最后一次运行,这可以是“skipped”或“pass/fail”运行,具体取决于哪个预览环境最后部署。
有没有办法强制 Github 仅列出相关运行? 我尝试了使该运行成为动态运行,并使测试运行成为强制运行,但如果“test”不是最后部署的 Vercel 环境,则检查仍会被覆盖。

我有同样的问题,但是针对剧作家运行和灯塔运行。 - Jacob Bowdoin
1个回答

1

Vercel会自动处理每个PR的部署。
GitHub Actions的挑战在于目前没有本地方法可以根据对PR的评论来触发操作,这使得从Vercel机器人的评论中提取数据有些困难。

然而,一个解决办法是创建一个在pull_request事件上触发的GitHub操作,并在此操作中使用GitHub API检索PR评论,过滤出Vercel机器人评论并提取所需的Cypress测试的部署URL。

可能看起来像:

name: Cypress tests
on:
  pull_request:
    types:
      - opened
      - synchronize
      - reopened

jobs:
  cypress-run:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Get comments
        id: comments
        run: |
          COMMENTS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
          "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments")
          echo "::set-output name=comments::$COMMENTS"
        shell: bash

      - name: Extract Vercel preview URL
        id: vercel_url
        run: |
          URL=$(echo '${{ steps.comments.outputs.comments }}' | jq -r '.[] | select(.user.login == "vercel[bot]") | .body' | grep -oP 'https://.*\.vercel\.app')
          echo "::set-output name=url::$URL"
        shell: bash

      - name: Cypress run
        uses: cypress-io/github-action@v5
        with:
          browser: chrome
          env: "CYPRESS_BASE_URL=${{ steps.vercel_url.outputs.url }}"

这将会:

  • 检出代码。
  • 使用GitHub API获取PR上的所有评论。
  • 从评论中提取Vercel预览URL。
  • 在提取的URL上运行Cypress测试。

(请用实际匹配部署URL的正则表达式替换https://.*\.vercel\.app)

这只是一个非常基本的例子:

  • 您可能需要处理更复杂的情况,比如每个PR有多个部署,这种情况下您可能需要循环遍历URL,对每个URL运行测试等。
  • 您还需要确保在运行测试之前Vercel部署已完成,这可能需要额外的检查或延迟。

另请参阅2023年1月Filip Hric的文章“Cypress.io和GitHub Actions:逐步指南”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接