Configuracion de TeamCity para enlazar con Git - Jusaba/Domo-Serverpic GitHub Wiki
En la pantalla principal de TeamCity, accedemos a Administration
En la mayoría de los casos, TeamCity detecta automáticamente su propia URL y la establece como URL del servidor, sin embargo, a veces la detección automática no es posible se debe especificar la URL del servidor, para eso, vamos a la opción Global Settings en el menu de la izquierda
Ahora debemos asegurarnos que el campo Server URL contiene el nombre del servidor donde se aloja Teamcity y si no es así, es necesario modificarlo
Ahora debemos configurar los datos generales para todos los proyector, volvemos al menú de la izquierda, vamos a Projects y seleccionamos Root Project
En el nuevo menú de la izquierda vamos a Connections y pulsamos el botón Add Connection
Se nos abre una ventana donde en primer lugar seleccionaremos GitHub.com como tipo de conexión y luego rellenaremos los campos Client Id y Client Secret con los datos que proporcionó GitHub en el momento de su configuración.
El siguiente paso es añadir el token de acceso de GitHub como un parametro denominado GH_TOKEN, para ello, vamos a Parameters y pulsamos l boton Add new parameter.
nos aparece una ventana donde ponemos el nombre de la variable GH_TOKEN, en el desplegable seleccionamos la opción Configuration parameter y por último en value ponemos el valor del token de GitHub que obtuvimos en la configuración de Git y pulsamos el botón de Save
Ahora ya esta TeamCity sincronizado con GitHub, podemos empezar a incluir repositorios, para ello en la opción General Settings pulsamos el botón Create subproject y si todo es correcto nos aparecerán todos los repositorios que tenemos en GitHub y podremos seleccionar cualquiera de ellos.
El siguiente y último paso consiste en desarrollar un scritp con el código necesario para compilar y distribuir entre los dispositivos una nueva versión del repositorio. Inicialmente hemos optado por crear una llamada a un sh incluido en el propio repositorio pero se podia heber puesto el contenido del sh directamente en TeamCity.
El proceso es el siguiente, En la barra de menu de la pagina principal de TeamCity, vamos a Projects, seleccionamos el proyecto deseado y pulsamos el botón Edit project situado a la derecha de la ventana. Vamos a Build Configurations y pulsamos el boton Create build configuration,
seleccionamos el repositorio sobre el que queremos hacer el build y se abre una nueva ventana y pulsando Proceed cogemos las opciones por defecto.
Nos aparecerá una ventana con todos los ficheros sh, si en el repositorio existe el fichero TeamCity.sh ( fichero que habremos elaborado previamente ) seleccionaremos este para la compilación y ahora, en la opción Build step: command line podremos editar el fichero de comandos que se ha creado.
Este fichero llama al fichero TeamCity.sh que es el que verdaderamente ejecutará la compilación y distribución a los dispositivos existentes. TeamCity.sh necesita unos parametros que se le deben pasar desde TeamCity, por eso, vamos a modificar el fichero creado por TeamCity. En realidad, solo habrá una línea de codigo con el siguiente texto
sh TeamCity.sh %build.number% %GH_TOKEN% %teamcity.build.default.checkoutDir%
Llamamos a TeamCity.sh y le pasamos tres parámetros: Número de compilación, Token de acceso a Git y el directorio de trabajo que utilizará TeamCity para el proceso de compilación
El contenido de un TeamCity.sh básico podría ser el utilizado en el proyecto pir y cuyo contenido es el siguiente
#---------------------------------------------------------------
#Parametros pasados
#$1.- Numero de compilación ( version )
#$2.- Token GitHub
#S3.- Directorio de trabajo de TeamCity
#----------------------------------------------------------------
#Ponemos en Serverpic.h la nueva versión de compilacion ($1)en la linea donde se define VBuild
nLinea=$(grep "#define VBuild" -n ServerPic.h | cut -d ":" -f 1 )
sed -i "${nLinea} d" ServerPic.h
sed -i "${nLinea} s|^|\t#define VBuild \"$1\"\n|" ServerPic.h
#Usuario que constara en las actualizaciones del repositorio
git config --global "user.name" "Teamcity"
git config --global "user.email" "[email protected]"
# Subimos al repositorio el fichero Serverpic.h modificado con la nueva versión y hacemos commit con [skip] para que no se dispare otra compilacion con este cambio
# y hacemos el push con el token de usuario de git ( $2 )
git add ServerPic.h
git commit -m "[skip] Compilacion version "$1
git push "https://"$2"@github.com/oscarsm91/pir" HEAD:master
#Creamos la carpeta librerias donde copiamos las librerias de Serverpic que están en el repositorio LibreriasServerpic
#Clonamos desde ese repositorio las librerias y para ello necesitamos el token de git ($2)
mkdir librerias
git clone "https://"$2"@github.com/oscarsm91/LibreriasServerpic" librerias
#Llamamos al compilador los parametros de compilacion se encuentran en el fichero parametros.env localizado en el repositorio
#los directorios en la maquina local se encuentran en el directorio de trabajo de teamCity ($3)
docker run --rm -v /opt/docker/teamCity/teamcity_agent/serverpic/$3/librerias:/root/Arduino/libraries/serverpic -v /opt/docker/teamCity/teamcity_agent/serverpic/$3:/home/bin/esp8266 --env-file parametros.env -i jusaba/esp8266-cli:latest
#componemos el nombre del ino compilado con la version de compiacion ($1)
cIno=$(grep "_ino" parametros.env | cut -d "=" -f 2 )
cInoVersion=$cIno"_$1.bin"
cIno=$cIno".bin"
mv $cIno $cInoVersion
#mandamos la version compilada al servidor
curl http://picservertest.jusaba.es:2001/firmware -F "file=@$cInoVersion"
#Borramos el contenido del directorio de trabajo
rm -rf librerias
rm -f *
Queda un último paso en la configuracion del proyecto, vamos al Build del proyecto y seleccionamos la opción edit Configuration
Desde el menu de configuración del build, accedemos a Triggers y añadimos un nuevo Trigger pulsando el boton Add new trigger y en el desplegable seleccionamos VCS Trigger
Añadimos una nueva condicion para que se ignore la accion de Command Line cuando en el texto de commit aparezca la palabra skip, para eso, pulsamos el boton Add new rule , aparece una ventana y la rellenamos con los siguientes datos.
En File wildcard se graba el patron -:comment=(.?)skip(.?):**
Una vez añadido nos aparece la siguiente pantalla.
Pulsamos Save y de esta forma, cuando el comentario de un commit contenga el texto skip, teamCity no ejecutara el proceso Build
Estas operaciones deben realizarse con cada nuevo proyecto de TeamCity