travis-ci - 在推送到不同的存储库时自动触发 Travis?

标签 travis-ci

每次推送到存储库 Y 时,有没有办法触发存储库 X 的 Travis CI 构建?具体来说,我希望每次推送到 http://github.com/tensorflow/tensorflow 时都开始构建。

最佳答案

好问题!以下是我能想到的一些解决方案:

如果你对 repo 有管理员权限 (或知道有人这样做),您可以创建一个订阅 push 的 webhook事件和触发时,使用 Travis API 在 Travis CI 上开始构建。

这将需要:

  • http://github.com/tensorflow/tensorflow/settings/hooks/new 上创建一个新的 GitHub 网络 Hook .当然,根据您的需要自定义设置,但根据我所掌握的信息,我建议使用 application/json内容类型,只有 GitHub 使用 push 触发 webhook事件。
  • 编写一个期望来自 GitHub 的 HTTP POST 有效负载的小型 Web 应用程序,并使用 Travis CI 的 API 开始构建。这个 Web 应用程序可以用任何语言编写,但它必须部署到始终保持清醒和监听的地方(以防止丢失构建)。

  • 这是我的例子。
    post "/push-webhook" do
      uri = URI.parse("https://api.travis-ci.org/repo/your-org/your-repo/requests")
    
      request = Net::HTTP::Get.new(uri.request_uri)
      request["Content-Type"] = "application/json"
      request["Accept"] = "application/json"
      request["Travis-API-Version"] = "3"
      request["Authorization"] = "token your-token"
    
      body = { "request" => { "branch" => "master" } }
      request.body = body.to_json
    
      response = http.request(request)
    end
    
  • 瞧!部署此 Web 应用程序并正确配置 GitHub Webhook 后,您应该会看到在 Travis CI 上运行的构建,每次新推送 http://github.com/tensorflow/tensorflow .

  • 有用的文档
  • https://docs.travis-ci.com/user/triggering-builds/
  • https://developer.github.com/webhooks/
  • https://developer.github.com/webhooks/configuring/

  • 但是,如果您对存储库没有管理员权限 ,您可以创建一个受您控制的存储库镜像,然后按照上面的说明进行操作(有一些区别)。从我所做的小研究来看,如果没有原始/官方存储库的管理员访问权限,就不可能(或至少不容易)在 GitHub 上创建存储库的镜像。

    话虽如此,我找到了一个可行的解决方法。
  • 进口 tensorflow/tensorflow到 GitLab 并使用镜像存储库功能,使其镜像 http://github.com/tensorflow/tensorflow作为您的 GitLab 存储库的上游。
  • 从那里,像往常一样按照上面的说明进行操作,除了使用 GitLab 的 webhook API 而不是 GitHub 发送推送事件以触发我们的 Web 应用程序开始在 Travis CI 上构建。

  • 有用的文档
  • https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/
  • https://docs.gitlab.com/ce/user/project/integrations/webhooks.html

  • 我希望这些信息对您有所帮助。如果您有任何其他问题,请告诉我,我很乐意尽我所能提供帮助。 :)

    关于travis-ci - 在推送到不同的存储库时自动触发 Travis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568519/

    相关文章:

    android - 有没有办法在 Android Gradle 项目中只运行一组特定的仪器测试?

    python - 如何让 Travis-CI 在测试期间识别和打开外部文件

    android - Travis-CI 和 Android JUnit 测试

    node.js - Travis-CI Node.js 默认为 Ruby 构建?找不到 RakeFile

    google-app-engine - 将 Web 应用程序部署到 travis-ci 上的 google app engine - travis 要求输入密码

    travis-ci - travis脚本部署超时

    python - 使用 pytest 时 travis ci 没有收集我的测试

    node.js - 带有 Jasmine Node 的 Travis-CI

    android - 无法使用 avdmanager 创建 Travis CI android 模拟器

    php - 为什么 APC 无法在 Travis-CI 上的 PHP v5.5 中工作?