当前位置: 首页 > 知识库问答 >
问题:

GitHub操作:仅对某些拉取请求基分支运行步骤

杜俊风
2023-03-14

我已经在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

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

共有2个答案

袁山
2023-03-14

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

“{DEV}base:{DEV}u”包含}

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

微生恩
2023-03-14

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

  • 我们希望第1步只运行于要开发的推式或拉式请求上。
  • 我们希望第2步只在对master的拉取请求上运行。
  • 步骤必须在一个workflow.yaml.

经过一些研究,下面是我们得出的结论。我发现Github的操作非常灵活,有很多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),都包含不同的“我的秘密”值。

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 }}
 类似资料:
  • 我已经在GitHub操作中设置了一个工作流来运行我的测试并创建测试覆盖的工件。我的YAML文件的精简版本如下所示: 问题是当测试失败时,工件不会被创建。 我从文档中找到了关于的条件,但这也会导致在我的步骤失败时运行此步骤。我不希望发生这种情况,因为在这种情况下没有什么可归档的。 如果上一步已经运行(成功或失败),我如何才能运行此步骤?

  • 我对GitHub Actions比较陌生,我有两个工作——一个是运行我的测试,另一个是将我的项目部署到服务器上。 显然,我希望测试在每个分支上运行,但是部署应该只在某个东西被推送到主控时发生。 我正在努力寻找在特定分支机构工作的方法。我知道只在特定分支上运行整个工作流是可能的,但是这意味着我将有一个“测试”工作流和一个“部署”工作流。 这听起来像是一个解决方案,但它们可以并行运行。在理想情况下,测

  • 问题内容: 当通过Web挂钩发出请求时,我正在使用Jenkins GitHub请求请求构建器插件来运行我的单元测试。对于构建步骤,我需要知道要合并到其中的分支的名称(例如,如果将其合并到master分支中,则需要开发分支)。在Jenkins execute shell中是否可以访问此方法?谢谢, 问题答案: 您的链接有答案: 该插件提供了一些非常有用的环境变量。 ghprbActualCommit

  • SonarQube有助于突出显示所有SONAR违规行为,并在本地系统上执行时分析每个Pull Application代码更改。 是否有任何选项/设置可以让我自动执行任何拉取请求,以便SonarQube在GIT中进行分析,并发送电子邮件或使用最新的SONAR代码违规情况更新仪表板?我只想在有人提出拉拽请求时自动进行声纳分析。

  • 我有以下GitHub操作的文件(删除了一些代码,以便更容易理解这个问题): 我经历了以下步骤: 在分支上进行一些提交,并推动这些更改 我期望GitHub Actions在第2项之后运行测试和部署阶段作业。但是相反,它只是再次运行,而没有运行。 如上所述,即使在推送到之后,它仍然在分支上运行,而不是在分支上运行。我有点假设这可能是由于一些奇怪的行为与快进合并。但是GitHub显然意识到我推动了,因为

  • 我有一份Jenkins Multi-branch的工作,从GitLab签出并构建代码。直到最近,它还可以正常工作,但现在一些(但不是全部)来自优秀大师的分支无法构建。大师总是建造没有问题。当我从GitLab中的repo或通过git checkout-b本地分支master并推回到GitLab,然后允许多分支作业拾取新分支时,它无法构建它。我从管道插件SCMBinder类得到消息:“无法确定[bra