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

时间:2017-12-04 20:17:29

标签: travis-ci

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

时都会启动我的构建

1 个答案:

答案 0 :(得分:2)

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

如果您拥有repo的管理员权限(或知道有人做过),您可以创建一个订阅push事件的webhook,并在触发时启动Travis的构建CI使用Travis API。

这需要:

  1. http://github.com/tensorflow/tensorflow/settings/hooks/new上创建新的GitHub webhook。当然,根据您的需要自定义设置,但是根据我的信息,我建议使用application/json内容类型,只让GitHub触发带有push事件的webhook。

  2. 编写一个期望来自GitHub的HTTP POST有效负载的小型Web应用程序,并使用Travis CI的API启动构建。此Web应用程序可以使用任何语言编写,但必须部署到始终保持清醒和监听的位置(以防止丢失构建)。

  3. 这是我的例子。

    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
    
    1. 瞧!部署此Web应用程序并正确配置GitHub webhook后,您应该看到在http://github.com/tensorflow/tensorflow上每次新推送时都在Travis CI上运行构建。
    2. 有用的文档

      但是,如果您对repo没有管理员权限,则可以在控件中创建 的存储库镜像,然后按照上面的说明进行操作(使用一些差异)。从我做的小研究开始,在GitHub上创建一个存储库的镜像是不可能的(或者至少不容易),而无需管理员访问原始/官方存储库。

      话虽如此,我找到了一个应该有效的解决方法。

      1. tensorflow/tensorflow导入GitLab并使用镜像存储库功能,使其镜像http://github.com/tensorflow/tensorflow作为您的GitLab存储库的上游。

      2. 从那里开始,按照上面的说明正常操作,除非使用GitLab的webhook API代替GitHub来发送推送事件以触发我们的网络应用程序在Travis CI上开始构建。

      3. 有用的文档

        我希望这些信息有用。如果您有任何其他问题,请告诉我,我很乐意以任何方式提供帮助。 :)