Verificando autenticación…

Saltar al contenido principal

GitLab Runners

Gitlab Runner es una aplicación que trabaja con GitLab CI/CD para ejecutar trabajos en una proceso de CI/CD1.

Cuando los desarrolladores envían código a GitLab, pueden definir tareas automatizadas en un archivo .gitlab-ci.yml. Estas tareas pueden incluir ejecutar pruebas, compilar aplicaciones o desplegar código. GitLab Runner es la aplicación (que puede estar en un contenedor, una máquina virtual o un servidor físico) que ejecuta estas tareas.

tip

Como ANDES, proporcionamos los Gitlab Runner y gestionamos la infraestructura donde se ejecutan estos trabajos de CI/CD. El equipo de CoreOps provee y mantiene algunos runners para casos específicos.

Etiquetas de GitLab Runner

Las etiquetas de GitLab Runner son identificadores usados para controlar qué runners específicos pueden ejecutar determinadas tareas en un pipeline de CI/CD.

Un runner debe tener todas las etiquetas definidas en la configuración YAML del job para poder ejecutarlo.

Conceptos clave:

  • Lógica de selección de tareas: Para que una tarea sea tomada por un runner, este debe poseer cada una de las etiquetas listadas en la sección tags del archivo .gitlab-ci.yml.
    tip

    Funciona como una condición de tipo “Y”, no “O”.

  • Propósito: Las etiquetas permiten diferenciar runners según sus capacidades, entornos o plataformas (por ejemplo, docker, macos, windows, gpu, testing-environment, ci, cd, entre otros).
  • Tareas sin etiquetas: Los runners pueden configurarse para ejecutar tareas que no tengan etiquetas (tareas sin etiquetar).
    tip

    Los runners LATAM no están configurados para ejecutar tareas sin etiquetas.

  • Etiquetas de GitLab CI/CD vs. etiquetas de Git: Las etiquetas de GitLab CI/CD son distintas de las etiquetas de Git, que se usan para marcar puntos específicos en el historial del repositorio (como lanzamientos).

Tipos de Runners en GitLab

Existen 2 tipos de Runners en GitLab:

  • Runners Compartidos: Son Runners disponibles para todos los proyectos dentro de una instancia de GitLab.
    peligro

    En LATAM Airlines se definió que los Shared Runners no sean utilizados, por lo que estos no tienen acceso a ningún recurso de la organización.

  • Runners Dedicados: Son Runners auto-gestionados disponibles en proyectos o grupos específicos, se identifican con etiquetas (tags) personalizadas para su uso.

Runners en ANDES

  • Todos son runners dedicados.

  • Cada runner utiliza una cuenta de servicio de Google (SA2) específica.

    • Estas cuentas de servicio permiten la interacción con diferentes recursos de GCP3 mediante la Federación de identidad de carga de trabajo (Workload Identity Federation).
    • Para que un runner pueda acceder a recursos en un proyecto específico de GCP, debes asignarle el rol adecuado a la cuenta de servicio correspondiente en el proyecto.
      • Roles a incorporar:
        • Rol Base: iam.serviceaccounts.actAs
        • Roles para desplegar:
          • Cloud Run: Cloud Run Admin (roles/run.admin)
          • Cloud Function: Cloud Functions Admin (roles/cloudfunctions.admin)
          • GKE:
            • Kubernetes Engine Admin (roles/container.admin)
            • Kubernetes Engine Cluster Admin (roles/container.clusterAdmin)
          • Storage:
            • Storage Admin (roles/storage.admin)
            • Storage Object Admin (roles/storage.objectAdmin)
      • Para más información sobre los roles disponibles en GCP, consulta la documentación de roles y permisos en GCP.
  • Cada runner se identifica con uno o más etiquetas (tags).

    • Para obtener más información sobre cómo usar etiquetas para asignar trabajos a runners específicos en GitLab, puedes visitar la documentación oficial de GitLab.
Detalles de todos los runners existentes

Existe distintas versiones de runners disponibles en distintos grupos de https://gitlab.com/latamairlines/

Runners por dominio de negocio

Todos estos runner se ejecutan sobre Kubernetes. Esta versión del Runner es versátil y permite la ejecución de múltiples jobs a través pods que pueden correr en paralelo. Este tipo de runners es compatible con la mayoría de los requerimientos de ejecución de tareas de CI/CD en LATAM.

Acá se ejecutarán

  • Tareas para compilación y construcción de artefactos
  • Tareas para ejecutar migraciones de bases de datos
  • Tareas para ejecutar procesos programados
  • Tareas de Tests compatibles con contenedores
  • Tareas de Validaciones
  • Tareas de Impresión de Resultados
  • Tareas de tipo Gates

A continuación, se muestran las etiquetas correspondientes a cada unidad de negocio:

Sub-Grupo en GitlabEtiqueta del RunnerCuenta de Servicio GCP
latamairlines/configlatam-0_configgcp-sa-0-config@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
latamairlines/0-ltmlatam-0_ltm
latamairlines/cyselatam-cysegcp-sa-cyse@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
latamairlines/datalatam-datagcp-sa-data@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
latamairlines/lycalatam-lycagcp-sa-lyca@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
latamairlines/operlatam-opergcp-sa-oper@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
latamairlines/paxclatam-paxcgcp-sa-paxc@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
latamairlines/shselatam-shsegcp-sa-shse@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
latamairlines/techlatam-techgcp-sa-tech@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
tip

Runners con tag latam-emx-kubernetes disponible para el grupo latamairlines/oper/emx y sus subgrupos, es administrado directamente por el Equipo de Plataforma de eMantto.

Runners para dind4

En caso de que se deban ejecutar trabajos que requieran el uso de runners con Docker-in-Docker, se debe utilizar la siguiente etiqueta:

Grupo en GitlabEtiqueta del RunnerCuenta de Servicio GCP
latamairlineslatam-dockergcp-sa-latamairlines@sp-te-cloudbees-prod-f4q0.iam.gserviceaccount.com
important

Este runner se encuentra a nivel de organización y es compartido por todas las unidades de negocio.

Runners por dominio at-core

Estos runners contienen todos la etiqueta andes y se crean por dominio at-core en la siguiente estructura:

  • ci-amd64: Tareas de integración continua, sobre arquitectura AMD64. Se crean 3 tamaños:
    • small
    • medium
    • large
  • cd: Tareas de entrega continua. Se crean en 1 tamaño, pero separando entornos pre-productivo y productivos:
    • preprod Para despliegues en todo entorno pre-productivo.
    • prod: Para despliegues en producción.
Runner NameSub-Grupo en GitlabEtiquetas del RunnerCuenta de Servicio GCPDescripción
andes-cd-medium-preprodlatamairlines/andesandes, cd, medium, preprodrun-andes-cd-preprod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy preprod en ANDES
andes-cd-medium-prodlatamairlines/andesandes, cd, medium, prodrun-andes-cd-prod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy prod en ANDES
andes-ci-largelatamairlines/andesandes, ci-amd64, large, prodrun-andes-ci-l-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner large para integracion prod en ANDES
andes-ci-mediumlatamairlines/andesandes, ci-amd64, medium, prodrun-andes-ci-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para integracion prod en ANDES
andes-ci-smalllatamairlines/andesandes, ci-amd64, prod, smallrun-andes-ci-s-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner small para integracion prod en ANDES
andes-components-cd-medium-preprodlatamairlines/config/andesandes, platforms, medium, cd, preprodrun-comp-cd-preprod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy preprod en ANDES components
andes-components-cd-medium-prodlatamairlines/config/andesandes, platforms, medium, cd, prodrun-comp-cd-prod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy prod en ANDES components
andes-components-ci-largelatamairlines/config/andesandes, platforms, large, ci-amd64run-comp-ci-l-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner large para CI en ANDES components
andes-components-ci-mediumlatamairlines/config/andesandes, platforms, medium, ci-amd64run-comp-ci-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para CI en ANDES components
andes-components-ci-smalllatamairlines/config/andesandes, platforms, small, ci-amd64run-comp-ci-s-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner small para CI en ANDES components
andes-ebusiness-cd-medium-preprodlatamairlines/paxc/ebzandes, ebusiness, medium, cd, preprodrun-ebiz-cd-preprod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy preprod en ebusiness
andes-ebusiness-cd-medium-prodlatamairlines/paxc/ebzandes, ebusiness, medium, cd, prodrun-ebiz-cd-prod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy prod en ebusiness
andes-ebusiness-ci-largelatamairlines/paxc/ebzandes, ebusiness, large, ci-amd64run-ebiz-ci-l-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner large para CI en ebusiness
andes-ebusiness-ci-mediumlatamairlines/paxc/ebzandes, ebusiness, medium, ci-amd64run-ebiz-ci-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para CI en ebusiness
andes-ebusiness-ci-smalllatamairlines/paxc/ebzandes, ebusiness, small, ci-amd64run-ebiz-ci-s-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner small para CI en ebusiness
andes-ecargo-cd-medium-preprodlatamairlines/lyca/ecargoandes, ecargo, medium, cd, preprodrun-eca-cd-preprod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy preprod en ecargo
andes-ecargo-cd-medium-prodlatamairlines/lyca/ecargoandes, ecargo, medium, cd, prodrun-eca-cd-prod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy prod en ecargo
andes-ecargo-ci-largelatamairlines/lyca/ecargoandes, ecargo, large, ci-amd64run-eca-ci-l-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner large para CI en ecargo
andes-ecargo-ci-mediumlatamairlines/lyca/ecargoandes, ecargo, medium, ci-amd64run-eca-ci-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para CI en ecargo
andes-ecargo-ci-smalllatamairlines/lyca/ecargoandes, ecargo, small, ci-amd64run-eca-ci-s-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner small para CI en ecargo
andes-eloyalty-cd-medium-preprodlatamairlines/lyca/eloyaltyandes, eloyalty, medium, cd, preprodrun-ely-cd-preprod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy preprod en eloyalty
andes-eloyalty-cd-medium-prodlatamairlines/lyca/eloyaltyandes, eloyalty, medium, cd, prodrun-ely-cd-prod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy prod en eloyalty
andes-eloyalty-ci-largelatamairlines/lyca/eloyaltyandes, eloyalty, large, ci-amd64run-ely-ci-l-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner large para CI en eloyalty
andes-eloyalty-ci-mediumlatamairlines/lyca/eloyaltyandes, eloyalty, medium, ci-amd64run-ely-ci-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para CI en eloyalty
andes-eloyalty-ci-smalllatamairlines/lyca/eloyaltyandes, eloyalty, small, ci-amd64run-ely-ci-s-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner small para CI en eloyalty
andes-emantto-cd-medium-preprodlatamairlines/oper/emxandes, emantto, medium, cd, preprodrun-emx-cd-preprod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy preprod en emantto
andes-emantto-cd-medium-prodlatamairlines/oper/emxandes, emantto, medium, cd, prodrun-emx-cd-prod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy prod en emantto
andes-emantto-ci-largelatamairlines/oper/emxandes, emantto, large, ci-amd64run-emx-ci-l-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner large para CI en emantto
andes-emantto-ci-mediumlatamairlines/oper/emxandes, emantto, medium, ci-amd64run-emx-ci-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para CI en emantto
andes-emantto-ci-smalllatamairlines/oper/emxandes, emantto, small, ci-amd64run-emx-ci-s-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner small para CI en emantto
andes-platforms-cd-medium-preprodlatamairlines/tech/platformsandes, platforms, medium, cd, preprodrun-plat-cd-preprod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy preprod en platforms
andes-platforms-cd-medium-prodlatamairlines/tech/platformsandes, platforms, medium, cd, prodrun-plat-cd-prod-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para deploy prod en platforms
andes-platforms-ci-largelatamairlines/tech/platformsandes, platforms, large, ci-amd64run-plat-ci-l-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner large para CI en platforms
andes-platforms-ci-mediumlatamairlines/tech/platformsandes, platforms, medium, ci-amd64run-plat-ci-m-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner medium para CI en platforms
andes-platforms-ci-smalllatamairlines/tech/platformsandes, platforms, small, ci-amd64run-plat-ci-s-prod-sa@latam-platform-prod-f7eb.iam.gserviceaccount.comRunner small para CI en platforms
important

Actualmente, los runners ANDES disponibles para la ejecución de jobs de CI corresponden a la arquitectura AMD64/x86_64 y deben utilizar el tag ci-amd64. Por el momento, no existen runners disponibles asociados al tag ci-arm64. En consecuencia, los pipelines que requieran ejecución sobre arquitectura ARM64 no cuentan actualmente con soporte mediante runners ANDES.

Solicitudes relacionadas con Runners

¿Solicitar un nuevo runner?

Si necesitas un nuevo runner para tu proyecto o grupo en GitLab, debes seguir estos pasos:

  1. Identificar la necesidad: Define claramente por qué necesitas un nuevo runner.
  2. Identifica características: Define qué características específicas debe tener (por ejemplo, etiquetas, recursos, etc.).
  3. Identifica el sub-grupo: Determina en qué sub-grupo de GitLab se debe crear el runner.
  4. Solicitar el runner: Contacta al equipo de ANDES a través del bot ANDES Bot en Google Chat, opción 8.0 con la información anterior.

¿Implementar Runners en infraestructura propia?

En el caso que sea necesario implementar runners independiente, sigue los mismos pasos anteriores, pero solo debes pedir el runner token que se entrega en un secreto de Google Secret Manager. Luego, debes proceder a implementar el runner en tu infraestructura.

Para evaluar las condiciones de tener una estructura de runners independiente debes revisar el documento de Política sobre uso de Runners

El servicio de ejecución de tareas de un pipeline debe considerar los siguientes elementos para operar:

  • Caché utilizando un storage de GCP.
  • Artefactos de jobs bajo el mismo storage de GCP.
  • Deployment de gitlab runner.
  • Service Account asignados a los nodepool del Gitlab Runner.

Footnotes

  1. CI/CD (Integración Continua/Entrega Continua o Despliegue Continuo) es un conjunto de prácticas automatizadas en desarrollo de software que aceleran la entrega de nuevas versiones de código a producción de forma frecuente y fiable, uniendo la integración de cambios pequeños con pruebas automatizadas y la liberación continua para mejorar la calidad y la agilidad del proceso, un concepto clave dentro de DevOps.

  2. Una cuenta de servicio (SA: Service Account) en Google Cloud Platform (GCP). Más información en https://docs.cloud.google.com/iam/docs/service-account-overview

  3. Google Cloud Platform (GCP) es una plataforma de servicios en la nube ofrecida por Google que proporciona una amplia gama de servicios y herramientas para el desarrollo, implementación y gestión de aplicaciones y servicios en la nube.

  4. Docker-in-Docker (DinD) es una técnica que permite ejecutar contenedores Docker dentro de otros contenedores Docker, facilitando la creación de entornos de desarrollo y pruebas aislados.