Introducció
El SIC actualment utilitza la tecnologia Docker per a disposar d’un entorn aïllat i immutable de construcció que, a més pugui ser utilitzat i testejat pels mateixos proveïdors en condicions equiparables a l’entorn d’execució del SIC.
Aquest how-to va dirigit a tots aquells perfils tècnics que tinguin la necessitat de simular i executar les imatges dels builders del SIC en un entorn local, sent possible ajustar les limitacions en recursos de memòria RAM que permetin comprovar que els processos de compilació podran ser executats sense sobrepassar els límits disponibles i alhora permeti monitorar en temps real el consum de recursos.
Instal·lació del motor de contenidors
Cal instal·lar l’eina de gestió de contenidors Podman seguint la següent guia: https://podman.io/getting-started/installation.
Si es vol monitorar l’ús de memòria i cpu en temps real amb Podman stats, cal activar Control Group v2: https://sleeplessbeastie.eu/2021/09/10/how-to-enable-control-group-v2/
Altres referències:
Ús del registre privat
En el Registre d’imatges corporatiu podreu trobar informació sobre el registre d’imatges, el codi font, la documentació associada i el procediment per a disposar d’accés.
Accés via consola web
Es pot accedir al catàleg a través de la seva consola web mitjançant: https://registreimatges.sic.intranet.gencat.cat. Un cop dins es pot navegar a través de les carpetes de les imatges del projecte gencat-sic-builders.
Login
Per a poder descarregar les imatges en local primer ens hem d’autenticar de la següent manera:
podman login https://registreimatges.sic.intranet.gencat.cat
Si no es tracta d’una imatge d’un projecte públic, caldrà introduir les credencials Gicar de l’usuari.
Descàrrega d’imatges
Un cop realitzada l’autenticació per línia de comandes, podem baixar-nos la imatge escollida mitjançant:
podman pull registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/node-builder:1.0-18
On, en el cas d’exemple, estem descarregant-nos la imatge node-builder versió 1.0-18.
Execució de les imatges
Un cop descarregada la imatge del builder, la podem executar en el nostre entorn local mitjançant:
podman run -it \
--memory=3072m \
--memory-reservation=3072m \
--memory-swap=3072m \
--rm \
--net=host \
--name gencat-sic-builder \
-v $HOME/.m2/settings.xml:/mnt/nexus/settings.xml \
-v $HOME/.npmrc:/app/.npmrc \
-v $PWD:/app:U -w "/app" \
registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/node-builder:1.0-18 \
/bin/sh
En aquest cas estem indicant què volem:
-
Que s’assignin 3GB de memòria al procès. Els valors de –memory, –memory-reservation i –memory-swap han de coincidir amb el límit màxim especificat al fitxer
aca.yml
, i concretament a la secciócomponents[].build.steps[].container.resources.limits.memory
. -
Que s’utilitzi el controlador
Host
de Podman per a compartir la xarxa del host. -
Que el nom de la imatge executant-se tingui el nom
gencat-sic-builder
. -
Que s’injectin com a volums els fitxers de configuració de maven i npm si són necessaris a la imatge.
En aquest punt, s’obrirà un shell des d’on executar manualment les comandes del builder especificades al fitxer aca.yml
.
Podeu finalitzar l’execució del contenidor mitjançant la següent comanda:
$ exit
Monitoratge del consum de recursos
Per tal de monitorar el consum de recursos en temps real, es pot executar la següent comanda en un terminal addicional:
podman stats
Generar fitxer de log
En cas que s’hagi de reportar un problema, es recomana executar les comandes de compilació activant un nivell de verbositat adient i generar un fitxer de log. Per exemple:
podman logs -t -l > ~/log-builder-sic.log
Per a més informació: https://docs.podman.io/en/latest/markdown/podman-logs.1.html
Logout
Si volem desconnectar-nos, serà necessari realitzar un logout mitjançant:
podman logout https://registreimatges.sic.intranet.gencat.cat
Estendre d’imatges Docker de SIC
És possible generar una imatge Docker heretant d’una imatge del catàleg de SIC.
Per a fer-ho, s’ha d’incloure al fitxer Dockerfile
la instrucció FROM
seguit del nom de la imatge base a utilitzar.
Per exemple:
FROM registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/mvn-builder:1.0-3.6-11-openjdk
Per tal d’evitar errors en la construcció de la imatge estesa, cal tenir en compte algunes recomanacions:
-
Els usuaris s’hereten de la imatge base i, per defecte, els usuaris de les imatges del SIC disposen de permisos limitats i destinats exclusivament a la construcció d’artefactes. És a dir, si es necessita instal·lar o executar algun programa addicional serà necessari invocar la instrucció USER per a canviar l’usuari a root.
-
Si es vol mantenir el comportament predeterminat de les imatges del SIC, serà necessari agregar al final la instrucció ENTRYPOINT amb la mateixa instrucció que està configurada a la imatge base i assegurar-se que l’usuari d’execució del contenidor es correspon amb el que s’utilitza a la imatge base.
-
Cal revisar el fitxer
Dockerfile
de la imatge base del SIC a utilitzar per a assegurar-se que les instruccions que conté apliquen per a la nova imatge. Per exemple, en una imatge estesa l’equip responsable del manteniment i suport és diferent, per tant, cal canviar el MAINTAINER i/o LABEL per a indicar l’adreça de correu adient. -
Altres criteris i recomanacions: Criteris creació contenidors docker.
Exemple:
# S'utilitza una imatge base del SIC.
FROM registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/mvn-builder:1.0-3.6-11-openjdk
# Es modifica el responsable de la imatge.
LABEL maintainer="change.me@gencat.cat"
# Es modifica l'usuari a root per a crear una variable d'entorn, instal·lar un programa addicional, donar permisos i eliminar fitxers innecessaris.
USER root
ENV FLEX_HOME='/flex-sdk'
RUN apk add --no-cache --virtual .build-deps curl tar unzip procps \
&& curl -fsSL -o /tmp/flex-sdk.zip http://download.macromedia.com/pub/flex/sdk/builds/flex3/flex_sdk_3.4.1.10084A.zip \
&& curl -fsSL -o /tmp/flex-sdk-libs.zip http://download.macromedia.com/pub/flex/sdk/datavisualization_sdk3.4.zip \
&& unzip /tmp/flex-sdk.zip -d "${FLEX_HOME}" \
&& unzip /tmp/flex-sdk-libs.zip -d "${FLEX_HOME}" \
&& chown -R 1000:1000 ${FLEX_HOME} \
&& chmod -R a+rx ${FLEX_HOME} \
&& apk del .build-deps \
&& rm -rf /tmp/* \
&& java -version \
&& mvn --version
# S'assegura que l'usuari d'execució dels contenidors associats a la imatge es correspongui amb l'utilitzat a la imatge base
USER 1000
CMD ["mvn", "-version"]