2013-11-15 10 views
22

Pracuję nad ustawieniem CI dla mojej aplikacji na iOS i mam do czynienia z niektórymi problemami.Niestandardowe skrypty wyzwalaczy dla Bot (Xcode 5 CI)

  • Gdzie jest dobre miejsce na znalezienie dokumentów na temat Bot? Widziałem Xcode pomoc, ale nie mogę znaleźć żadnego dobrego przykładu, również oglądałem wideo CI z 2013 konferencji
  • Jak utworzyć niestandardowy skrypt wyzwalacza, więc za każdym razem, gdy programista zatwierdza swój kod, automatycznie wyzwoli bota .
  • Jak scalić kod do wzorca tylko wtedy, gdy Test pomyślnie przejdzie bota?

Oto gdzie znalazłem informacje o skryptach spustowych https://help.apple.com/xcode/mac/1.0/#apdE6540C63-ADB5-4B07-89B7-6223EC40B59C

Przykładowe wartości przedstawione są w każdym ustawieniu. Harmonogram: wybierz, aby ręcznie uruchamiać , okresowo, po nowych zatwierdzeniach lub w skryptach wyzwalających .

Dziękujemy!

Odpowiedz

0

W schemacie bota utwórz skrypt budowania postów, który analizuje wyniki testu.

Wyniki badań będą się tutaj:

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

Po zweryfikowaniu, że testy przechodzą w tym plist, można wtopić się pana.

Następnie stwórz bota, który integruje się tylko wtedy, gdy ktoś popycha do opanowania. Wydaje mi się, że edytowanie harmonogramu bota ma opcję odpytywania repo dla zmian. Upewnij się, że bot jest tworzony przez projekt Xcode, który jest aktualnie na serwerze głównym.

Pierwszy bot musiałby zostać utworzony, gdy Xcode znajduje się w gałęzi testowej, którą utworzysz.

2

Na stronie dewelopera Apple znajduje się numer Continuous Integration Guide, który zawiera szczegółowe objaśnienia dotyczące konfiguracji kompilacji CI. Brakuje jednak szczegółów na temat skryptów uruchamiających.

Najlepszą dokumentację można znaleźć w samych skryptach serwera OSX. Termin "skrypty uruchamiające" używany przez firmę Apple odnosi się do haków po otrzymaniu w Git. Git zdarzeń Git można dodać do podkatalogu .git/hooks dowolnego repozytorium Git, aby wykonać akcje w odpowiedzi na zdarzenia w repozytorium Git, które je zawiera.

Aby zobaczyć przykładowy hak po otrzymaniu, który specjalnie "kopie" usługę Xcode w celu uruchamiania kompilacji CI, utwórz hostowane repozytorium Git na serwerze z usługą budowania Xcode. Domyślnie repozytoriom Git dodanym do serwera Xcode będzie automatycznie tworzone przechwycenie po odebraniu. W tym przypadku jest to skrypt w języku Ruby, który POST z repository i tworzy pola odpowiadające adresowi URL repozytorium (tak, jak jest skonfigurowane w usłudze Xcode) i gałęzi odpowiednio do pobrania.

Stwórz hostowane repozytorium, wykonując czynności opisane w przewodniku Xcode Continuous Integration Guide, a następnie wyświetl zawartość /Library/Server/Xcode/Repositories/git/<your project>.git/hooks/post-receive na serwerze Xcode. Jeśli hostujesz projekty Git gdzie indziej (np.BitBucket, GitHub lub linux box w sieci lokalnej) możesz użyć tego pliku jako przewodnika podczas tworzenia własnego haka po otrzymaniu w wybranym języku skryptowym.

Przykładem dla tych, którzy nie mają możliwość tworzenia gospodarzem repo na swoim serwerze produkcji:

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