【问题标题】:Trigger a Travis-CI rebuild without pushing a commit?在不推送提交的情况下触发 Travis-CI 重建?
【发布时间】:2013-07-10 12:31:05
【问题描述】:

使用 Travis-CI,是否可以在不向 GitHub 推送新提交的情况下触发重建?

用例:构建由于外部性而失败。来源实际上是正确的。如果只是重新运行,它将构建良好并通过。

例如,apt-get 由于包服务器关闭而失败,但服务器又恢复了。但是,在推送新的提交之前,构建状态“卡在”“失败”。

除了推送“虚拟”提交之外,还有什么方法可以推动 Travis-CI 进行另一个构建?

【问题讨论】:

    标签: travis-ci


    【解决方案1】:
    • 如果您对 repo 有写入权限:在构建的详细信息屏幕上,有一个按钮 ↻ 重新启动构建。在“更多选项”下还有一个触发器构建菜单项。

      注意:Ghostery 等浏览器扩展程序可能会阻止显示重启按钮。尝试禁用扩展程序或将 Travis CI 列入白名单。

      注意2:如果.travis.yml 的配置在上游发生了变化,点击rebuild 按钮将使用旧配置运行travis。要为 travis 配置应用上游更改,必​​须向 PR 添加提交或关闭/重新打开它。

    • 如果您已发送拉取请求:您可以close the PR then open it again。这将触发一个新的构建。

    重启构建:

    触发构建:

    【讨论】:

    • 我在其他情况下发现并使用了它。但我可以发誓我有一个案例,由于我上面描述的原因,它出错了,并且齿轮菜单缺少该选项。也许那是一次侥幸,或者我弄错了。无论如何,我认为您回答了 supposed 是如何工作的,所以我会继续将您的答案标记为已接受。谢谢!
    • 如果我查看我拥有的任何项目的构建历史记录,无论是错误还是失败,它都有一个restart button
    • 我认为一个棘手的情况是,您为其他人的项目提交了拉取请求,并且由于与您的 PR 本身无关的原因而出错,而您知道它会成功如果你可以轻推它再试一次。你不能(不是你的项目)是可以理解的——但你为什么想要(你的 PR 错误地“看起来很糟糕”)也是可以理解的。
    • 别忘了你必须登录才能看到这个:P
    • 并且您需要对 github repro 具有写入权限。所以这不适用于向上游推送的分叉。
    【解决方案2】:

    如果您在 GitHub 上打开存储库的 Settings 选项卡,请单击 Integrations & services,找到 Travis CI 并单击 编辑,您应该会看到一个测试服务按钮。这将触发构建。

    【讨论】:

    • 我认为 travis-ci 删除了重新启动构建按钮,所以这是唯一对我有用的方法。它执行两个构建...
    • @Blaise 您是否使用过 Ghostery(或类似的)?尝试禁用它。对我来说,这会导致 Restart Build 按钮重新出现。
    • 这在您最初为 repo 激活 Travis CI 构建时有效。对于没有任何先前构建的存储库,“重新加载构建”按钮不存在。
    • 给像我这样的白痴的注意事项:在 Github 的存储库中打开 Settings,而不是在 Travis 的 repo 页面上!我不敢相信我浪费了 20 分钟试图在 Travis 的页面上找到 Service Hooks。 :(
    • 在 github 中看不到这个选项。
    【解决方案3】:

    我知道你说过没有推送提交,但是如果你在 master 以外的分支上工作,那么方便的是提交一个空提交。

    git commit --allow-empty -m "Trigger"

    您可以在最后进行 rebase 并删除 squash/删除空提交并适用于所有 git 钩子 :)

    【讨论】:

    • 太棒了,谢谢!我只想补充一点,为了将“触发器”提交在历史上进一步移动,我必须重新设置基准;否则它只会在删除“触发器”提交时丢弃新构建。
    • 同理,你可以修改现有的提交并强制推送: git commit --amend --no-edit && git push -f
    • @grahamrhay 当您不是目标存储库的所有者时,这是触发 PR 构建的最佳方式,它保留内容,无需合并或变基或做任何事情。请将其作为答案,以便更明显地对其进行投票。
    • 我派生了一个我无权访问的存储库,这是唯一对我有用的东西,因为 Travis 没有任何可以在我新创建的 fork 上重新启动的构建。
    • @TWiStErRob 有人在下面写了这样的答案。
    【解决方案4】:

    我找到了另一种强制重新运行 CI 构建和其他触发器的方法:

    1. 运行git commit --amend --no-edit 而不做任何更改。这将在当前分支中重新创建最后一次提交。
    2. git push --force-with-lease origin pr-branch

    【讨论】:

    • 我不推荐这个。它会破坏性地修改历史记录,因此可能会使基于此提交的分支的人感到困惑,并且 --amend 标志在某些情况下也可能不会更改 HEAD 提交。
    • 我发现它在极少数情况下只需要 BUMP webhooks 来进行 PR。没有人应该真正从拉取请求中分支出来,所以没有人会依赖确切的提交 ID。
    • 选择git push --force-with-lease origin pr-branch,这样您就不会意外地破坏别人的更改
    【解决方案5】:

    如果你在 GitHub 上有一个新项目,它有 .travis.yml,但从未经过测试,你可以通过这种方式运行测试而无需提交:

    1. 在 Travis CI 设置中启用测试
    2. 在 GitHub 上打开项目页面
    3. 打开设置 -> webhook 和服务
    4. 在服务中找到 Travis CI 并按下编辑按钮
    5. 按“测试服务”

    【讨论】:

    • 这是新创建项目的答案。
    【解决方案6】:

    您可以使用Travis CLI 执行此操作。作为described in the documentation,先安装CLI工具,然后:

    travis login --org --auto
    travis token
    

    您可以将此令牌保存在环境变量 TRAVIS_TOKEN 中,只要您保存它的文件在某个公共位置不受版本控制。

    我使用这个函数提交触发器:

    function travis_trigger() {
         local org=$1 && shift
         local repo=$1 && shift
         local branch=${1:-master} && shift
    
         body="{
                 \"request\": {
                   \"branch\": \"${branch}\"
                  }
               }"
    
         curl -s -X POST \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Travis-API-Version: 3" \
              -H "Authorization: token $TRAVIS_TOKEN" \
              -d "$body" \
              "https://api.travis-ci.org/repo/${org}%2F${repo}/requests"
     }
    

    【讨论】:

    • 你可以为你的 fork 设置你自己的 Travis 版本。
    • 你可以构建你的 fork 的分支,作为拉取请求的来源。
    • 你的 PR 的分支和 PR 本质上是一回事,对吧?如果自您进行 PR 以来上游有其他更改,当然,您需要重新设置它以 100% 确定。但这无论如何都需要发生,GitHub 应该在 UI 中显示一个 rebase 按钮​​,在这种情况下会触发 PR 的新构建。
    【解决方案7】:

    Travis 现在提供了一种从其 Web UI 触发“自定义”构建的方法。在项目页面顶部附近的右侧寻找“更多选项”菜单按钮。

    然后您会看到一个对话框,您可以在其中选择分支并自定义配置:

    在我写这篇文章的时候,它处于测试阶段,并且似乎有点错误(但我希望他们很快就会解决问题)。

    【讨论】:

    • 谢谢。对我来说,这是最好的回应,因为触发器构建也会更改构建的 ID,而不是简单的重建(通过按钮)。如果您在脚本中使用 Travis 的 id,请务必了解。
    • 这需要更高的
    【解决方案8】:

    如果您安装了Travis CI Client,您可以使用travis restart <job#> 从控制台手动重新运行构建。你可以使用travis show <branch>找到分支的最后一个工作#

    travis show master
    travis restart 48 #use Job number without .1
    travis logs master
    

    更新:遗憾的是,看起来这并没有使用最新的提交开始新的构建,而是只是使用 repo 的先前状态重新启动先前的构建。

    【讨论】:

    • 我不明白更新说明。从命令看来,您可以定义要重新启动的作业。所以这个问题即将触发一个工作,假设大多数人会想要这样做,如果他们的提交已经触发但他们想再次测试它......哦,我想你不能停用提交分支触发器并手动构建 HEAD。
    • @redanimalwar 一个常见的用例是在无法检测到更改或处于安静期时强制构建 CI。
    【解决方案9】:

    如果构建从未发生(可能是您没有及时将 Pull-Request 构建开关设置为打开),您可以将 Github 上的 Pull Request 标记为已关闭,然后将其标记为已打开,然后将触发新的构建.

    【讨论】:

      【解决方案10】:

      我应该在这里提到,我们现在有了一种在网络上触发新构建的方法。详情请见https://blog.travis-ci.com/2017-08-24-trigger-custom-build

      TL;DR 点击“更多选项”,然后选择“触发构建”。

      【讨论】:

      • 如果您对存储库没有写入权限/合作者并且想要为您自己的拉取请求重新运行构建,则此方法不起作用。我没有看到那个选项。在尝试使用 Travis CLI 时,它会显示 build #xxxx has been restarted,但如果您查看网页,您不会看到任何构建发生
      【解决方案11】:

      我刚刚通过单击此处的“更新分支”触发了重新运行拉取请求的测试:

      【讨论】:

        【解决方案12】:

        以下是我在 Dependabot 已打开的 PR 上触发重建但由于 .travis.yml 中的错误而失败的方法:

        1. 关闭公关
        2. 等待 Dependabot 发表评论(“好的,我不会再次通知您有关此版本的信息,但会在有新版本可用时与您联系。”)。它将删除它的分支。
        3. 恢复已删除的分支 Dependabot(类似于 dependabot/cargo/tempfile-3.0.4)。
        4. 再次打开 PR

        【讨论】:

          【解决方案13】:

          请确保先登录到 Travis。在您登录之前,重建按钮不会出现。我知道这很明显,但也有人绊倒了它;-)

          【讨论】:

            【解决方案14】:

            有时服务器确实会犯一些错误。 尝试注销/登录,然后一切都可能正确。 (是的,今天下午发生在我身上。)

            【讨论】:

              【解决方案15】:

              如果您没有写入权限,请关闭并重新打开 PR。

              【讨论】:

              • 不,请不要留下垃圾拉取请求,这很烦人。只需将新提交推送到您的分支(例如,您可以更改提交日期:git commit --amend --date=now && git push -f)。
              猜你喜欢
              • 1970-01-01
              • 2016-04-30
              • 1970-01-01
              • 1970-01-01
              • 2020-09-17
              • 2021-06-30
              • 2016-10-05
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多