GitHub Actions:仅为特定拉取请求基础分支运行步骤

5

我已经在GitHub Actions上工作了相当长的时间,并且我们有一个指定的工作流程。该工作流程使用yaml编写。

我正在尝试为github.ref设置一些if条件,但是这个yaml块在运行时被跳过了。 也就是说 - 如果针对X分支提出了拉取请求 - 那么应该运行该代码块。

类似于这样:

 
      - name: Branch name check - Running only for DEV branch.. 
        if: ${{contains(github.ref, 'DEV*')}}
        uses: mathrix-education/sonar-scanner@master

        with:
          version: 4.2.0.1873 # required
          typescript: false
          scan: true

有人能帮我解决这个问题吗?


你的分支实际上是如何命名的?也许你应该省略 *,只使用 if: ${{contains(github.ref, 'DEV')}} 来仅在分支名称包含 DEV 时运行该步骤。 - riQQ
我正在尝试创建一个通用的YAML文件,它应该独立于分支名称。但是当针对X分支提出PR时-应该进行检查。 branches: - master - UAT - DEV*在DEV之后的任何内容都应该被捕获。例如:DEV2020。就像这样。 - Rahul Ravikumar
你没有真正回答我的问题,你试过我的建议了吗(去掉 *)? - riQQ
@riQQ:是的,我尝试过了。它仍然被跳过了。 - Rahul Ravikumar
我的回答解决了您的问题吗?如果是,请接受它:https://stackoverflow.com/help/someone-answers - riQQ
2个回答

10

在构建github工作流程时,我们遇到了类似的问题。我们所面临的情况是:

  • 我们希望步骤1仅在推送或针对develop分支的拉取请求时运行。
  • 我们希望步骤2仅在针对master分支的拉取请求时运行。
  • 所有步骤必须在一个workflow.yaml文件中。

经过一些研究,以下是我们想出的解决方案。我发现Github Actions非常灵活,提供了许多Gitlab和Bitbucket没有的选项。但这也是它更加复杂的原因,有时很难理解。

---
name: my-workflow
on:
  push:
    branches:
      - develop
  pull_request:
    branches:
      - develop
      - main
    types:
      - closed

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: checkout repo
        uses: actions/checkout@v1
      - name: step 1
        if: github.ref == 'refs/heads/develop' || github.event.pull_request.base.ref == 'develop'
        run: echo "Hello develop"
      - name: step 2
        if: github.event.pull_request.base.ref == 'master'
        run: echo "Hello master"

我建议尽量不要经常在分支上使用if语句,这会导致不同分支之间的部署存在不一致性。对于某些用例,您最好使用github环境(仅适用于企业版)。例如,如果您需要为不同分支设置不同的环境变量或密码。下面是一个简单的示例,您可以在两个github环境(develop和main)中都包含不同的MY_SECRET密码值。
name: my-workflow
on:
  push:
    branches:
      - develop
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    name: Do something
    steps:
      - run: echo "Example using environments corresponding branch names"
    environment: ${{ github.ref == 'refs/heads/main' && 'main' || github.ref == 'refs/heads/develop' && 'develop' }}
    env:
      MY_SECRET: ${{ secrets.MY_SECRET }}

1
使用以下内容来检查拉取请求的基础: if: ${{contains(github.base_ref, 'DEV')}} 对于拉取请求,github.ref 将包含类似于 refs/pull/1/merge 的内容。

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