continuous-integration xcode5 xcode-bots

continuous integration - Scripts de activación personalizados para Bot(Xcode 5 CI)



continuous-integration xcode5 (2)

Estoy trabajando en la configuración de CI para mi aplicación iOS y me enfrento a algunos problemas.

  • ¿Dónde es un buen lugar para encontrar documentos en Bot? He visto la ayuda de Xcode pero no puedo encontrar ningún buen ejemplo, también vi el video de CI de la conferencia de 2013
  • ¿Cómo puedo crear un script de activación personalizado, por lo que cada vez que un desarrollador confirma su código activará automáticamente el bot?
  • ¿Cómo fusiono el código para dominar solo si la prueba pasa el bot con éxito?

Aquí es donde encontré información sobre los scripts de activación https://help.apple.com/xcode/mac/1.0/#apdE6540C63-ADB5-4B07-89B7-6223EC40B59C

Los valores de ejemplo se muestran con cada ajuste. Programación: elija ejecutar manualmente, periódicamente, en confirmaciones nuevas o en scripts de activación .

¡Gracias!


En el esquema del bot, cree un script de compilación posterior que analice los resultados de la prueba.

Los resultados de la prueba se encontrarán aquí:

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

Una vez que verifique que las pruebas pasan en esa lista, puede fusionarse con el maestro.

Luego crea un bot que solo se integre cuando alguien empuja a dominar. Creo que editar la programación del bot tiene una opción para sondear un repositorio para los cambios. Asegúrate de que el bot sea creado por un proyecto de Xcode que esté actualmente en master.

El primer bot tendría que crearse cuando Xcode esté en la rama de prueba que crearías.


Hay una Guía de integración continua disponible en el sitio web para desarrolladores de Apple que proporciona explicaciones detalladas sobre cómo configurar las compilaciones de su CI. Sin embargo, carece de detalles sobre los scripts de activación.

Para eso, la mejor documentación se encuentra en los scripts del servidor OSX. El término "scripts de activación" tal como lo utiliza Apple hace referencia a los ganchos posteriores a la recepción en Git. Los ganchos de eventos de Git se pueden agregar al subdirectorio .git / hooks de cualquier repositorio de Git para realizar acciones en respuesta a los eventos en el repositorio de Git que los contiene.

Para ver un ejemplo de enlace posterior a la recepción que específicamente "patea" un servicio de Xcode para ejecutar compilaciones de CI, cree un repositorio Git alojado en el servidor que aloja su servicio de compilación de Xcode. De forma predeterminada, los repositorios Git agregados a un servidor Xcode tendrán un enlace posterior a la recepción creado automáticamente. En este caso, es un script de Ruby que http://localhost/xcs/kick-commit-bots POST a http://localhost/xcs/kick-commit-bots con el repository y los campos de formulario de branch establecidos en la URL del repositorio (como está configurado en el servicio Xcode) y el Rama para tirar respectivamente.

Entonces, cree un repositorio alojado siguiendo los pasos descritos en la Guía de integración continua de Xcode y luego vea los contenidos de /Library/Server/Xcode/Repositories/git/<your project>.git/hooks/post-receive en el servidor de Xcode . Si aloja sus proyectos Git en otro lugar (p. Ej., BitBucket, GitHub o Linux Box en su red local), puede usar este archivo como guía cuando cree su propio enlace posterior a la recepción en el lenguaje de scripting que elija.

Un ejemplo para aquellos que no tienen la opción de crear un repositorio alojado en su servidor de compilación:

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