机器人的自定义触发脚本(Xcode 5 CI) [英] Custom Trigger Scripts for Bot (Xcode 5 CI)

查看:25
本文介绍了机器人的自定义触发脚本(Xcode 5 CI)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我的 iOS 应用程序设置 CI,但遇到了一些问题.

I am working on setting up CI for my iOS application and I am facing some issues.

  • 哪里是在 Bot 上查找文档的好地方?我看过 Xcode帮助但找不到任何好的例子,还观看了来自的 CI 视频2013年会议
  • 如何创建自定义触发脚本,所以每次开发人员提交他们的代码,它会自动触发机器人.
  • 只有在测试成功通过的情况下,如何将代码合并到 master机器人?

在这里我找到了有关触发脚本的信息https://help.apple.com/xcode/mac/1.0/#apdE6540C63-ADB5-4B07-89B7-6223EC40B59C

Here is where I found info about trigger scripts https://help.apple.com/xcode/mac/1.0/#apdE6540C63-ADB5-4B07-89B7-6223EC40B59C

每个设置都显示了示例值.时间表:选择运行手动、定期、新提交或触发脚本.

Example values are shown with each setting. Schedule: Choose to run manually, periodically, on new commits, or on trigger scripts.

谢谢!

推荐答案

有一个Continuous Integration Guide 可在 Apple 开发者网站上找到,其中详细说明了如何设置您的CI 构建.但是,它缺少有关触发脚本的详细信息.

There is a Continuous Integration Guide available on the Apple developer website which provides detailed explanations of how to set up your CI builds. It lacks details on trigger scripts however.

为此,最好的文档可以在 OSX Server 脚本本身中找到.Apple 在此处使用的术语触发脚本"指的是 Git 中的 post-receive 挂钩.Git 事件挂钩可以添加到任何 Git 存储库的 .git/hooks 子目录中,以执行操作以响应包含它们的 Git 存储库上的事件.

For that the best documentation is found in the OSX Server scripts themselves. The term "trigger scripts" as used here by Apple refers to post-receive hooks in Git. Git event hooks can be added to the .git/hooks subdirectory of any Git repository to perform actions in response to events on the Git repository which contains them.

要查看专门启动"Xcode 服务以运行 CI 构建的示例 post-receive 挂钩,请在托管 Xcode 构建服务的服务器上创建托管 Git 存储库.默认情况下,添加到 Xcode 服务器的 Git 存储库将自动创建一个接收后挂钩.在这种情况下,它是一个 Ruby 脚本,它 POSTs 到 http://localhost/xcs/kick-commit-botsrepositorybranch 表单字段设置为存储库的 URL(因为它是在 Xcode 服务中配置的)和要拉取的分支.

To see an example post-receive hook which specifically "kicks" an Xcode service to run CI builds, create a hosted Git repository on the server hosting your Xcode build service. By default, Git repositories added to an Xcode server will have a post-receive hook created automatically. In this case it is a Ruby script which POSTs to http://localhost/xcs/kick-commit-bots with repository and branch form fields set to the URL of the repository (as it is configured in the Xcode service) and the branch to pull respectively.

因此,按照 Xcode 持续集成指南中概述的步骤创建一个托管存储库,然后查看 /Library/Server/Xcode/Repositories/git/<your project>.git/hooks/的内容Xcode 服务器上的 post-receive.如果您在其他地方托管您的 Git 项目(例如 BitBucket、GitHub 或本地网络上的 linux 机器),您可以在使用您选择的脚本语言创建自己的接收后挂钩时使用此文件作为指南.

So, create a hosted repository by following the steps outlined in the Xcode Continuous Integration Guide and then view the contents of /Library/Server/Xcode/Repositories/git/<your project>.git/hooks/post-receive on the Xcode server. If you host your Git projects elsewhere (e.g. BitBucket, GitHub or a linux box on your local network) you can use this file as a guide when creating your own post-receive hook in your scripting language of choice.

对于那些无法在其构建服务器上创建托管存储库的用户的示例:

An example for those who don't have the option of creating a hosted repo on their build server:

#!/usr/bin/env ruby

##
# Copyright (c) 2014 Apple Inc. All Rights Reserved.
#
# IMPORTANT NOTE: This file is licensed only for use on Apple-branded
# computers and is subject to the terms and conditions of the Apple Software
# License Agreement accompanying the package this file is a part of.
# You may not port this file to another platform without Apple's written consent.
#
# IMPORTANT NOTE: This file is licensed only for use with the Wiki Server feature
# of the Apple Software and is subject to the terms and conditions of the Apple
# Software License Agreement accompanying the package this file is part of.
##

# fill in the exact URL to your repository, as entered in your OS X Server configuration
$repository_url = "file:///git/python-lrparser.git"
$repository_mode = "git"

# fill in the hostname of your OS X Server machine; this must be accessible by the server
# on which your repository is hosted; you may use "localhost" for the local machine
#server_host = "server.example.com"
$server_host = "localhost"


##########################################
## DO NOT EDIT BELOW THIS LINE
##########################################

require 'net/http'

def kick(branch)
  theURL = URI("http://#{$server_host}/xcs/kick-commit-bots")
  if branch.nil?
    Net::HTTP.post_form(theURL, 'repository' => $repository_url)
  else
    Net::HTTP.post_form(theURL, 'repository' => $repository_url, 'branch' => branch)
  end
end

if __FILE__ == $0
  # determine what branch this is a push to, if possible
  branches = []

  if $repository_mode == "git"
    $stdin.each_line do |line|
      oldrev, newrev, ref = line.strip.split
      if ref =~ %r{^refs/heads/(.+)$}
        branches.push($~[1])
      end
    end
  elsif $repository_mode == "svn" and ARGV.length >= 2
    repository = ARGV[0]
    revision = ARGV[1]
    modifiedDirs = `svnlook dirs-changed -r #{revision} #{repository}`.lines.map { |line| line.chomp }
    modifiedDirs.each do |d|
      if d =~ %r{branches/([^/]+)}
        branches.push($~[1])
      end
    end
  end

  # if we have no branch information, just kick generically
  puts "Notifying OS X Server..."
  if branches.empty?
    kick(nil)
  else
    # otherwise, do a targeted kick for each relevant branch
    branches.each do |branch|
      kick(branch)
    end
  end
end

这篇关于机器人的自定义触发脚本(Xcode 5 CI)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆