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