Подтвердить что ты не робот

Пользовательские триггерные скрипты для бота (Xcode 5 CI)

Я работаю над настройкой CI для моего приложения iOS, и мне приходится сталкиваться с некоторыми проблемами.

  • Где хорошее место для поиска документов в Bot? Я видел Xcode помогите, но не можете найти хороший пример, также смотрели видео CI от Конференция 2013 года.
  • Как создать настраиваемый триггер script, поэтому каждый раз, когда разработчик совершает свой код, он автоматически запускает бота.
  • Как объединить код для овладения, только если тест успешно пройден бот?

Вот где я нашел информацию о триггерных скриптах https://help.apple.com/xcode/mac/1.0/#apdE6540C63-ADB5-4B07-89B7-6223EC40B59C

Примерные значения отображаются с каждой настройкой. Расписание: выберите вручную, периодически, на новых коммитах или на сценариях запуска.

Спасибо!

4b9b3361

Ответ 1

На веб-сайте разработчика Apple есть Руководство по непрерывной интеграции, в котором содержатся подробные объяснения того, как настроить свои сборки CI. Однако в нем отсутствуют детали скриптов триггеров.

Для этого наилучшая документация найдена в сценариях самого OSX Server. Термин "скрипты запуска", используемый здесь Apple, относится к крюкам после приема в Git. Git Ключи событий могут быть добавлены в подкаталог .git/hooks любого репозитория Git для выполнения действий в ответ на события в репозитории Git, который их содержит.

Чтобы увидеть пример post-receive hook, который специально "запускает" службу Xcode для запуска сборок CI, создайте размещенный репозиторий Git на сервере, на котором размещена ваша служба построения Xcode. По умолчанию репозитории Git, добавленные на сервер Xcode, автоматически создадут крюк после приема. В этом случае это Ruby script, от POST до http://localhost/xcs/kick-commit-bots с полями формы repository и branch, заданными для URL-адреса репозитория (как он настроен в службе Xcode), и ветвь для вытягивания соответственно.

Итак, создайте размещенный репозиторий, выполнив шаги, описанные в Руководстве по непрерывной интеграции Xcode, а затем просмотрите содержимое /Library/Server/Xcode/Repositories/git/<your project>.git/hooks/post-receive на сервере Xcode. Если вы размещаете свои проекты Git в другом месте (например, BitBucket, GitHub или Linux-ящик в локальной сети), вы можете использовать этот файл в качестве руководства при создании своего собственного метода post-receive на выбранном языке сценариев.

Пример для тех, у кого нет возможности создания размещенного репо на своем сервере сборки:

#!/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 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

Ответ 2

В схеме бота создайте пост-сборку script, которая анализирует результаты теста.

Результаты теста будут расположены здесь:

/Library/Server/Xcode/Data/BotRuns/Latest/output/xcodebuild_result.bundle/Info.plist

Как только вы подтвердите, что тесты проходят в этом plist, вы можете объединиться в master.

Затем создайте бота, который интегрируется только тогда, когда кто-то нажимает на мастер. Я считаю, что редактирование бот-графика имеет возможность опроса репо для изменений. Убедитесь, что бот создан проектом Xcode, который в настоящий момент находится на главном сервере.

Первый бот должен быть создан, когда Xcode находится на тестовой ветке, которую вы создадите.