【问题标题】:GitHub Actions: run step only for certain pull request base branchesGitHub Actions:仅为某些拉取请求基础分支运行步骤
【发布时间】:2020-12-28 04:56:13
【问题描述】:

我从事 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

谁能帮我解决这个问题?

【问题讨论】:

  • 您的分支机构实际上是如何命名的?如果分支名称包含DEV,您可能应该只使用* 并且仅使用if: ${{contains(github.ref, 'DEV')}} 来运行该步骤。
  • 我正在尝试制作一个通用的 yaml,它应该独立于分支名称。但是当针对该 X 分支提出 PR 时 - 应该进行检查。 ``` 分支: - 主 - UAT - DEV* ``` DEV 之后的任何东西 - 它应该把它捡起来。例如:DEV2020。像这样。
  • 你没有真正回答我的问题,你尝试过我的建议吗(不考虑*)?
  • @riQQ:是的——我试过了。它仍然被跳过。
  • 我的帖子能回答你的问题吗?如果是,请采纳:stackoverflow.com/help/someone-answers

标签: github sonarqube yaml github-actions


【解决方案1】:

我们在构建 github 工作流时遇到了类似的事情。我们工作的条件:

  • 我们希望第 1 步仅在推送或拉取请求上运行以进行开发。
  • 我们希望第 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 environments(仅限企业)。例如,如果您需要为不同的分支设置不同的环境变量或机密。下面是一个简单的示例,您可以有两个 github 环境(develop 和 main),它们都包含不同的 secret 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 }}

【讨论】:

    【解决方案2】:

    使用以下内容检查拉取请求的基础:

    if: ${{contains(github.base_ref, 'DEV')}}

    github.ref 将包含类似refs/pull/1/merge 的内容,用于拉取请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多