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

GitHub操作在错误的分支上运行工作流

薛滨海
2023-03-14

我有以下GitHub操作的. github/workflow/ci.yml文件(删除了一些代码,以便更容易理解这个问题):

name: CI
on:
  push:
  release:
    types: [published]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      # ...
  deploy-staging:
    runs-on: ubuntu-latest
    needs: test
    if: github.event_name == 'push' && github.ref == 'staging'
    steps:
      # ...

我经历了以下步骤:

  1. develope分支上进行一些提交,并推动这些更改

我期望GitHub Actions在第2项之后运行测试和部署阶段作业。但是相反,它只是再次运行test,而没有运行部署阶段

如上所述,即使在推送到暂存之后,它仍然在Development分支上运行,而不是在暂存分支上运行。我有点假设这可能是由于一些奇怪的行为与快进合并。但是GitHub显然意识到我推动了暂存,因为它提供了从该分支创建PR到master

因此,这让我重新思考我的理论,为什么它试图在develope而不是staging上运行。

为什么会发生这种事?有没有办法解决这个问题,以便合并到分期实际上在分期上运行工作流,而不是开发

共有2个答案

韦思淼
2023-03-14

我的方法是将触发器和相关作业分离到不同的工作流中。

因此,为了模仿您的示例,而不是ci。yml我将有两个文件:

  • test.yml
  • deploy-staging.yml

中。github/工作流/测试。yml

name: Test
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      # ...

中。github/工作流/发布阶段。yml

name: Release Staging

on:
  push:
    branches:
      - staging

jobs:
  deploy-staging:
    runs-on: ubuntu-latest
    steps:
      # test steps ...
      # release ...

诚然,这很烦人,因为发行版不会在与测试相同的测试运行中运行,但是您希望在部署之前确保测试都通过。

如果您想链接测试运行工作流以运行部署工作流,我可能会更改release staging以使用Check-suite事件而不是push。

封飞
2023-03-14

${{github.ref}}将是refs/heads/staging而不仅仅是staging

在这些情况下,最好的做法是在执行之前的步骤中回显要检查的变量值:

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

  • 我开始使用GitHub Actions,并且能够为Elixir设置CI管道,操作构建和测试没有任何问题。我还想使用heroku操作部署应用程序,所以我继续添加了GitHub中可用的应用程序,但在这样做之后,我收到了以下错误: 无效的工作流文件每个步骤都必须定义一个用途或运行键 这是我的工作流程在添加heroku操作之前的样子: 这就是我添加heroku动作的方式 以下是错误以了解更多详细信息。

  • 到目前为止,我们还没有在我们项目上使用过分支。然而你并不知道,我们实际已经工作在了一个分支上了。这是因为在 Git 上的分支功能并不是可选的,你永远会工作在一个分支中的(当前的 “active”,或者 “checked out”,或者 “HEAD”分支)。 那么 Git 是如何知道你当前在哪个分支上工作的呢? “git status” 命令输出的第一行会向我们显示出 “在主分支(branch ma

  • 我刚刚开始为一个项目设置一个Github操作工作流。我试图在一个容器内运行工作流步骤,并使用以下工作流定义: 但工作流无法声明容器立即停止到期。 我尝试了很多图片,包括官方文档中描述的“alpine:3.8”图片,但容器停止了。 根据GitHub操作的工作流语法,在容器部分中:“一个容器,用于运行作业中尚未指定容器的任何步骤。”我的假设是容器将被启动,步骤将在Docker容器内运行。

  • $ git branch 添加-a选项,就可以显示包括远端分支在内的分支清单。 创建分支 $ git branch <branchname> 高级篇 【教程1 操作分支】 1. 建立分支 修改分支的名称 $ git branch -m <oldbranch> <newbranch> 删除分支 $ git branch -d <branchname> 若有未合并到HEAD的提交,则不能删除分支。如果

  • 我已经在GitHub Actions上工作了很长一段时间,我们有一个指定的工作流程。工作流程是用yaml编写的。 我试图为设置一些条件,并且在运行中跳过yaml的块。这意味着——如果针对X分支提出拉取请求——该代码块应该运行。 像这样的东西: 有人能帮我解决这个问题吗?