如何配置Travis-CI以构建拉取请求并合并到主无冗余

Bri*_*tle 64 github pull-request travis-ci

用"BDD"术语表示:

背景:
鉴于我正在为GH回购做出贡献

当我创建拉取请求时
,Travis应该构建最新的提交

当我推送到现有的pull请求时
,Travis应该构建最新的提交

当我将拉取请求合并到主人
那时,特拉维斯应该建立主人

我对Travis-CI的"构建推送"和"构建PR"设置感到困惑,因为:

  • 启用两者会导致每个Pull Request由Travis构建两次
    • 一次用于该分支的提交
    • 并再一次将该分支合并提交到其目的地
  • 仅启用"构建PR"会导致构建PR,但不会导致合并后构建(即在master上).
  • 通过构建对仓库的所有推动,启用"推动"强力满足上述标准.您可以尝试通过白色和黑色列表分支来完成事情,但除非您严格遵守分支名称,否则这可能会让您感到厌烦.

Travis-CI文档GH问题#3241中对此进行了更多解释.

有人知道满足上述标准的配置吗?

Bri*_*tle 100

我最终发现了另一个GH问题(#2111),它让我尝试启用PR和推送,但使用白名单限制推送到特定分支.这似乎满足我的工作流程的标准.这是我做的:

  1. 在repo的Travis设置中启用PR和分支推送:

启用travis push/pr设置

  1. 更改.travis.ymlwhite-list master分支(即只有构建推送到master):
branches:
  only: 
    - master
  1. 通过创建带有.travis.yml更改PR来测试它,另一个带有一些空提交的PR来验证它是否适用于forks.

  2. 从master验证成功的合并提交构建.

构建合并到master的结果

  • 这是否仍然适用于指向除`master`之外的其他功能的子功能分支PR?我相信这依赖于Travis的PR build env vars的奇怪怪癖,并且不适用于那种情况. (3认同)

gro*_*ser 12

刚刚在travis docs中找到

添加到.travis.yml

if: type = push
Run Code Online (Sandbox Code Playgroud)

或者:

if: type = pull_request
Run Code Online (Sandbox Code Playgroud)


Cor*_*oel 12

假设您想构建所有PR,类似以下的内容就可以解决问题。在设置页面上启用分支和 PR 构建,并将此行作为您的第一行travis.yml

if: (type = push AND branch IN (master, dev)) OR (type = pull_request AND NOT branch =~ /no-ci/)

这将尝试对所有推送进行推送构建,并在所有推送上构建 PR 构建到开放 PR,但会过滤掉任何不符合条件的内容。您可能需要稍微修改一下 - 关于不在名称中某处使用 no-ci 构建分支的条款显然是可选的,并且您可能没有两个总是想要运行构建的分支。

您可以在 Travis 的网站上阅读有关条件条件构建的更多信息。