有没有办法在拉取请求上触发 CircleCI 构建?

alk*_*aia 6 github circleci

所以,我遇到的问题是,现在 CircleCI 不会在 PR 上触发构建,而且我有一些检查,我只想在 PR 上运行。有这个选项:

仅构建拉取请求

默认情况下,我们将为该项目构建所有提交。一旦打开,我们将只构建已打开相关拉取请求的分支。注意:对于您的默认分支,我们将始终构建所有提交。

但是,这不是我需要的,因为我仍然需要在每次提交、所有分支上运行一些检查,而不仅仅是默认的。

这是我的 circle.yml 文件中的内容:

test:
  override:
    - if [[ ! -z $CI_PULL_REQUEST ]] ; then yarn test:selenium ; fi
Run Code Online (Sandbox Code Playgroud)

只有打开 PR对分支进行了另一次推送时才会触发此操作,因为只有这样才会触发构建。

我只是无法找到解决方法,有人有任何想法吗?

Nic*_*mer 5

如果你在 github 上,现在有一种方法,并且你愿意运行一个快速的 github 操作来逗乐 CircleCI。动作非常快,所以不会消耗太多 github 动作时间。

通过在 .github/workflows/main.yml 中保存以下内容来设置操作

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  pull_request:
    types: [opened,reopened]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    - name: Tickle CircleCI
      env:
        CIRCLE_BRANCH: ${{ github.head_ref }}
      run: |
        curl -X POST \
        -H 'Circle-Token: ${CIRCLE_TOKEN}' \
        -H 'Content-Type: application/json' \
        -H 'Accept: application/json' \
        -d "{\"branch\":\"${CIRCLE_BRANCH}\"}" \
        https://circleci.com/api/v2/project/<project_slug>/pipeline

Run Code Online (Sandbox Code Playgroud)

将 <project_slug> 替换为您的项目的 slug,即 gh/<repo_owner>/<repo_name>。

现在在 CircleCI 中设置一个令牌,并将其作为 CIRCLE_TOKEN 添加到 github 操作中的秘密中。

接下来,在您希望有条件地作为第一步运行的任何作业中,向您的 .circleci/config.yml 添加一个步骤。我们总是在 master 上运行测试,所以这会考虑到这一点。随意调整以适应您的需求。

      - run:
          name: Check for PR or master
          command: |
            if [ -z "$CIRCLE_PULL_REQUEST" ]; then
              if [ "$CIRCLE_BRANCH" != "master" ]; then
                echo "Not a PR or master, halting"
                circleci step halt
              fi
            fi
Run Code Online (Sandbox Code Playgroud)

如果 PR 未打开,则作业将在 CircleCI 上运行,然后立即停止。就 CircleCI 时间而言,这也不是非常昂贵,因此总体而言,这让我们可以以合理的成本运行所有对 master 的提交和任何公开 PR 中的任何内容。

当您打开 PR 时,github 操作将运行并触发 CircleCI 重新运行,但由于 PR 现在已打开,它将完全运行。

这种方法的一个缺点是,您将在 PR 打开之前对运行的提交进行绿色检查,表明测试已通过,但它们没有,但是一旦 github 操作运行最后一次提交,您关心的提交就会改变当 CircleCI 重新运行作业时,返回黄色。

未来的提交仅由 CircleCI 运行,一旦 PR 打开,github 操作根本不会运行,在 github 操作中您无需付出任何代价。