我对GitHub Actions比较陌生,我有两个工作——一个是运行我的测试,另一个是将我的项目部署到服务器上。
显然,我希望测试在每个分支上运行,但是部署应该只在某个东西被推送到主控时发生。
我正在努力寻找在特定分支机构工作的方法。我知道只在特定分支上运行整个工作流是可能的,但是这意味着我将有一个“测试”工作流和一个“部署”工作流。
这听起来像是一个解决方案,但它们可以并行运行。在理想情况下,测试将首先运行,并且只有测试成功,部署作业才会启动。使用两个单独的工作流时,情况并非如此。
我怎样才能做到这一点?是否可以在特定分支上运行作业?
大多数答案为一个分支提供了解决方案。要限制作业在任何特定的分支集上运行,可以使用带有多个析取(|
)运算符的if
条件来执行;但这太冗长了,不尊重枯燥的原则。
同样可以使用包含
函数以较少的重复进行归档。
使用包含
:
contains('
refs/heads/dev
refs/heads/staging
refs/heads/production
', github.ref)
与使用多个
|
相比:
github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/staging' || github.ref == 'refs/heads/production' || …
完整的例子:
---
on: push
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run tests
run: …
deployment:
name: Deployment
runs-on: ubuntu-latest
needs: [test]
if:
contains('
refs/heads/dev
refs/heads/staging
refs/heads/production
', github.ref)
steps:
- uses: actions/checkout@v2
- name: Deploy
run: …
下面是我为应该只在特定分支上运行的步骤所做的工作。
- name: Publish Image
# Develop branch only
if: github.ref == 'refs/heads/develop'
run: |
... publish commands ...
在最近的更新中,您现在可以将if
条件置于job
级别。请参阅此处的文档。https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idif
我测试了这个工作流,它在每次推送时运行作业test
,但只在主分支上运行deploy
。
name: my workflow
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Execute tests
run: exit 0
deploy:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/master'
steps:
- name: Deploy app
run: exit 0
下面是我的原始答案,如果您希望有单独的工作流程,还有一个替代解决方案。
第一个工作流针对每个分支运行,但主分支除外。在此工作流中,您仅运行测试。
on:
push:
branches:
- '*'
- '!master'
第二个工作流只运行
master
,如果测试成功通过,则运行测试和部署。
on:
push:
branches:
- master
我有以下GitHub操作的文件(删除了一些代码,以便更容易理解这个问题): 我经历了以下步骤: 在分支上进行一些提交,并推动这些更改 我期望GitHub Actions在第2项之后运行测试和部署阶段作业。但是相反,它只是再次运行,而没有运行。 如上所述,即使在推送到之后,它仍然在分支上运行,而不是在分支上运行。我有点假设这可能是由于一些奇怪的行为与快进合并。但是GitHub显然意识到我推动了,因为
我已经在GitHub Actions上工作了很长一段时间,我们有一个指定的工作流程。工作流程是用yaml编写的。 我试图为设置一些条件,并且在运行中跳过yaml的块。这意味着——如果针对X分支提出拉取请求——该代码块应该运行。 像这样的东西: 有人能帮我解决这个问题吗?
我已经在GitHub操作中设置了一个工作流来运行我的测试并创建测试覆盖的工件。我的YAML文件的精简版本如下所示: 问题是当测试失败时,工件不会被创建。 我从文档中找到了关于的条件,但这也会导致在我的步骤失败时运行此步骤。我不希望发生这种情况,因为在这种情况下没有什么可归档的。 如果上一步已经运行(成功或失败),我如何才能运行此步骤?
$ git branch 添加-a选项,就可以显示包括远端分支在内的分支清单。 创建分支 $ git branch <branchname> 高级篇 【教程1 操作分支】 1. 建立分支 修改分支的名称 $ git branch -m <oldbranch> <newbranch> 删除分支 $ git branch -d <branchname> 若有未合并到HEAD的提交,则不能删除分支。如果
我正在使用新的GitHub操作,下面的工作流的想法是当pr打开或同步时运行,它应该首先检查并安装依赖项,然后运行几个纱线脚本 目前它成功地进入了结帐阶段,但是一旦安装作业运行,我就会出现以下错误 错误:找不到包。“/home/runner/work/myRepo/myRepo”中的json文件 从这个结帐失败或者我在一个错误的文件夹中判断?
我正在使用一个无线电组件,当选择一个项目时,我想在该组件上执行对支持bean的操作(不是导航到结果页面,而是执行一些操作,然后通过Ajax更新当前页面)。问题是我无法让支持bean值更改侦听器操作执行 还有背豆法... 代码中是否有我遗漏的错误?我使用了相同的结构来选择多个复选框,这是有效的。。。