Saltar al contenido

Comparte gitlab-ci.yml entre proyectos

Agradeceríamos tu apoyo para difundir nuestros tutoriales con relación a las ciencias de la computación.

Solución:

Primero permítanme comenzar diciendo: ¡Gracias por hacer esta pregunta! Me impulsó a buscar una solución (nuevamente) después de preguntarme a menudo si esto era posible. También tenemos como 20 – 30 proyectos que son bastante idénticos y tienen .gitlab-ci.yml archivos de alrededor de 400 – 500 loc que deben cambiarse cada uno si algo cambia.

Así que encontré una solución de trabajo:

Inspirado en la plantilla Auto DevOps .gitlab-ci.yml creada por Gitlab, y donde usan un trabajo de plantilla para definir todas las funciones utilizadas y llamar a cada before_script para cargarlos, se me ocurrió la siguiente configuración.

  • Múltiples repositorios de proyectos (proyecto-1, proyecto-2) que requieren un conjunto compartido de trabajos/funciones de CI
  • Script de funciones que contiene todas las funciones compartidas en un repositorio separado

archivos

Entonces, usando un scipt de trabajos de ci compartido:

#!/bin/bash

function list_files 
  ls -lah


function current_job_info 
  echo "Running job $CI_JOB_ID on runner $CI_RUNNER_ID ($CI_RUNNER_DESCRIPTION) for pipeline $CI_PIPELINE_ID"

Un común y genérico .gitlab-ci.yml:

image: ubuntu:latest

before_script:
  # Install curl
  - apt-get update -qqq && apt-get install -qqqy curl
  # Get shared functions script
  - curl -s -o functions.sh https://gitlab.com/giix/demo-shared-ci-functions/raw/master/functions.sh
  # Set permissions
  - chmod +x functions.sh
  # Run script and load functions
  - . ./functions.sh

job1:
  script:
    - current_job_info
    - list_files

Puede copiar y pegar su archivo del proyecto 1 al proyecto 2 y estaría usando las mismas funciones compartidas de Gitlab CI.

Estos ejemplos son bastante detallados para propósitos de ejemplo, optimícelos de la forma que desee.

Lecciones aprendidas

Entonces, después de aplicar la construcción anterior a gran escala (más de 40 proyectos), quiero compartir algunas lecciones aprendidas para que no tenga que averiguarlo por las malas:

  • Versión (etiqueta/liberación) de su secuencia de comandos de funciones ci compartidas. Cambiar una cosa ahora puede hacer que todas las canalizaciones fallen.
  • El uso de diferentes imágenes de Docker podría causar un problema en el requisito de bash para cargar las funciones (por ejemplo, uso algunas imágenes basadas en Alpine para trabajos basados ​​en herramientas CLI que tienen sh por defecto)
  • Utilice variables secretas de CI/CD basadas en proyectos para personalizar trabajos de compilación para proyectos. Como URL de entorno, etc.

GitLab 11.7 introduce nuevo include métodos, tales como include:file: https://docs.gitlab.com/ee/ci/yaml/#includefile

include:
  - project: 'my-group/my-project'
    ref: master
    file: '/templates/.gitlab-ci-template.yml'

Esto le permitirá crear un nuevo proyecto en la misma instancia de GitLab que contiene un .gitlab-ci.yml.

Usar include función (disponible en GitLab 10.6): https://docs.gitlab.com/ee/ci/yaml/#include

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *