TeamCity - Jusaba/Domo-Serverpic GitHub Wiki

TeamCity es una solución de integración continua de uso general.

Vamos a utilizar TeamCity para compilar y distribuir las nuevas versiones del software de los dispositivos. Para conseguirlo, es imprescindible enlazar TeamCity con GitHub de forma que cuando subamos una nueva versión de software a GitHub, este avise a TeamCity para que compile esta nueva versión y la mande al servidor que será quien realmente la distribuirá entre los dispositivos.

Puede accederse a la web del desarrollador en https://www.jetbrains.com/es-es/teamcity/

Existen tres suscripciones para su uso, en nuestro caso nos decantamos por la opción gratuita, TeamCity Profesional. Para esta opción, el hospedaje corresponde al usuario, es decir, el equipo para soportar TeamCity Profesional es gestionado por el cliente.

Para Serverpic, el host donde vamos a ubicar TeamCity es lleida.jusaba.es en el puerto 8111

Servidor

Para poner en marcha el servidor teamcity, antes de nada creamos los directorios que usaremos como volumnes en

    /home/pi/teamcity/logs
    /home/pi/teamcity/data

y les daremos autporización de acceso total

    chmod 777 /home/pi/teamcity/logs/
    chmod 777 /home/pi/teamcity/data/

por ultimo, arrancamos el contenedor

  docker run -d --name server -v /home/pi/teamcity/data:/data/teamcity_server/datadir \
    -v /home/pi/teamcity/logs:/opt/teamcity/logs  \
    -p 8111:8111 \
    jetbrains/teamcity-server

Es posible utilizar tres agentes, de entrada utilizaremos uno en contenedor docker solo en la misma máquina y otro directamente en el sistema ( sin contenedor ).

Agente en Docker

Para inicializar el contenedor se ha utilizado lo siguiente

  docker run -d --name teamcity-agent-instance \
   -e SERVER_URL="http://server:8111" --link server  \
   -v /var/run/docker.sock:/var/run/docker.sock  \
   -v /opt/docker/teamCity/teamcity_agent/conf:/data/teamcity_agent/conf  \
   -v /opt/docker/teamCity/teamcity_agent/serverpic:/opt/buildagent/work  \
   jetbrains/teamcity-agent

Antes de arrancar TeamCity es necesario conceder permisos en el contenedor del agente. Entrar en el contenedor de la siguiente forma

   docker exec -it --user root teamcity-agent-instance bash

Dar permisos con los siguientes comandos

cd /var/run
chmod 777 docker.sock

Comprobar que el fichero /data/teamcity_agent/conf tiene actualizados todos los permisos

Salir del contenedor con Ctrl + D

Agente en el sistema

En principio se había utilizado el Agente Docker y habia funcionado perfectamente pero dio problemas cuando se intento utilizar para hacer buildx utilizando otro contenedor (buildkitd), por ello, se ha optado por tener un agente instalado en el sistema directamente de esta forma se consigue hacer build manejando otros contenedores sin ningun problema Para instalar el Agente es necesario tener instalado JDK. Hemos instalado en Debian 10 el paquete jdk-17

    mkdir /home/pi/AgentTeamcity
    cd /home/pi/AgentTeamcity
    wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.deb
    apt install ./jdk-17_linux-x64_bin.deb

Configuramos el entorno Java

    cat <<EOF | tee /etc/profile.d/jdk.sh
    export JAVA_HOME=/usr/lib/jvm/jdk-17/
    export PATH=\$PATH:\$JAVA_HOME/bin
    EOF

Verificamos que la instalación es correcta

    source /etc/profile.d/jdk.sh
    java -version

Ahora tenemos que bajar el agente en un directorio creado para tal fin, descomprimirlo y configurarlo, antes de configurarlo es aconsejable hacer una copia del fichero original de configuracion

Para bajar el agente lo haremos desde el host donde se encuentra el servidor Teamcity, en este caso en localhost.

    
    cd /home/pi/AgentTeamcity
    curl http://localhost:8111/update/buildAgent.zip --output agent.zip
    unzip agent.zip
    cd conf
    cp buildAgent.dist.properties buildAgent.properties

Para poner en marcha el Agente, desde el directorio TeamcityAgent proceder de la siguiente forma

    cd bin
    chmod 777 agent.sh 
    ./agent.sh start

Ahora ya podemos acceder a TeamCity via web en http://lleida.jusaba.es:8111 con el usuario admin y el password de costumbre e incorporar los agentes.

Habilitar el/los agentes y comprobar que estan disponibles, en la barra superior debe a parecer un 1 o 2 en la opcion Agents

Pulsando en el icono de Agentes se accede a la configuracion de los agentes, en el Pool se pueden activar/desactivar y etrando en cada uno de ellos se puede acceder a caracteristicas individuales.

Agente Remoto

Puede ser que interese tener un agente en una máquina remota con el objetivo de descargar la local o aproverchar la potencia de otra máquina. Lo primero que se debe hacer es instalar el Agente en el sisteema remoto tal como se ha descrito en el apartado anterior


    mkdir TeamcityAgent
    cd TeamcityAgent 
    curl http://lleida.jusaba.es:8111/update/buildAgent.zip --output agent.zip
    unzip agent.zip
    cd conf
    cp buildAgent.dist.properties buildAgent.properties

Ahora debemos editar el fichero de configuración y en la linea

serverUrl=http://localhost:8111/

deberemos especificar donde se encuentra el servidor de Teamcity, en nuestro caso quedaría

serverUrl=http://lleida.jusaba.es:8111/

y en la linea

name=

Le pondremos el nombre que queremos asignar a este agente

name=Remoto

ya solo queda poner en marcha el Agente

    cd bin
    chmod 777 agent.sh 
    ./agent.sh start

En el servidor tendremos que habilitar y autorizar el Agente tal como se hizo en el apartado anterior

Para poder utilizar los agentes para compilaciones multiplataforma teclearemos el siguiente comando

    docker buildx create --name mibuilder --bootstrap --use

Esto hará que se baje y se ejecute automaticamente el contenedor moby/buildkit que permitira al agente compilar multiplataformas

Ahora, como se ha comentado anteriormente, es necesario enlazar TeamCity con GitHub, para conseguirlo se han de realizar las configuraciones en ambas aplicaciones según el detalle de los siguientes capitulos. Por un lado tendremos que configurar GitHub y por otro, deberemos configurar TeamCity