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

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

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

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

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

Благодарю вас!


person mshah    schedule 15.11.2013    source источник


Ответы (2)


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

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

Чтобы увидеть пример хука после получения, который специально «запускает» службу Xcode для запуска сборок CI, создайте размещенный репозиторий Git на сервере, на котором размещена служба сборки Xcode. По умолчанию в репозиториях Git, добавленных на сервер Xcode, автоматически создается ловушка после получения. В данном случае это сценарий Ruby, в котором от POSTs до 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-бокс в вашей локальной сети), вы можете использовать этот файл в качестве руководства при создании собственного хука после получения на выбранном вами языке сценариев.

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

#!/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
person Dave    schedule 19.08.2014

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

Результаты тестирования будут здесь:

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

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

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

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

person Schlank    schedule 21.03.2014