Saltar al contenido

Cómo ejecutar un trabajo específico en gitlab CI

Posterior a consultar con expertos en esta materia, programadores de deferentes ramas y maestros dimos con la solución a la interrogande y la dejamos plasmada en este post.

Solución:

Puede usar una expresión variable de gitlab con solo/excepto como se muestra a continuación y luego pasar la variable a la ejecución de la canalización según sea necesario.

Este ejemplo ejecuta por defecto ambos trabajos, pero si se pasa ‘true’ para “firstJobOnly” solo ejecuta el primer trabajo.

Viejo enfoque(aún válido a partir de gitlab 13.8) – solo/excepto

variables:
  firstJobOnly: 'false'

before_script:
  - docker info

job1:
  script:
    - do something

job2:
  script:
    - do something
  except:
    variables:
      - $firstJobOnly =~ /true/i

Enfoque actualizado – normas

Si bien lo anterior aún funciona, la mejor manera de lograr esto ahora sería usar la sintaxis de reglas. Un ejemplo simple similar a mi respuesta original está a continuación.

Si explora las opciones en la sintaxis de las reglas, dependiendo de las restricciones específicas del proyecto, hay muchas formas de lograrlo.

variables:
  firstJobOnly: 'false'

job1:
  script: 
    - do something

job2:
  script: 
    - do something
  rules:
    - if: '$firstJobOnly == "true"'
      when: never
    when: always

Enfrentamos el mismo problema en el pasado y estoy compartiendo con ustedes nuestra solución.

#Observación#

  • leí la respuesta de Yawad y lo encontré bueno y lo hemos probado cuando enfrentamos el problema.
  • Mi comentario es que agregar when: manual siempre mostrará TODOS sus trabajos en la tubería.
  • Entonces, si trabaja en un equipo grande, no puede evitar que otros colaboradores hagan clic por error o por error en el trabajo que no desea que se inicie.

#Lo que estoy suponiendo antes de continuar#

  • Digamos que tienes 4 trabajos.
  • Necesita ejecutar siempre (manual o automáticamente) job 1, job 2 y job 4 pero no job3.
  • Solo quieres correr job 3 en un caso específico o simplemente cuando decidas ejecutarlo.

#La idea es #

  • Lanzamos el tercer trabajo solo para etiquetas que coincidan con una expresión regular.

  • En el siguiente ejemplo, se lanza para etiquetas como helloTag.1, helloTag.2, helloTag.3… etc

  • si estamos en develop o master (u otra rama), tendremos 3 etapas (etapa 1, etapa 2, etapa 4)

    Tenga en cuenta cómo el tercer trabajo no está presente en la canalización

    ingrese la descripción de la imagen aquí

  • Vaya a “Repositorio” –> “Etiquetas” –> “Nueva etiqueta”

    Asigne a la etiqueta un nombre que se parezca mucho a su expresión regular.

    ingrese la descripción de la imagen aquí

  • Si estamos en una etiqueta cuyo nombre comienza con “helloTag.”, tendremos 1 etapa (etapa 3)

    Tenga en cuenta cómo otras etapas no están presentes aquí

    ingrese la descripción de la imagen aquí

#Ejemplo de .gitlab-ci expediente#

stages:
    - myStage1
    - myStage2
    - myStage3
    - myStage4

This is my first stage:
    stage: myStage1
    before_script:
        - echo "my stage 1 before script"
    script:
         - echo "my stage 1 script"
    except:
        - /^helloTag.*$/

This is my second stage:
    stage: myStage2
    before_script:
        - echo "my stage 2 before script"
    script:
         - echo "my stage 2 script"
    except:
        - /^helloTag.*$/

This is my third stage:
    stage: myStage3
    before_script:
        - echo "my stage 3 before script"
    script:
         - echo "my stage 3 script"
    only:
        - /^helloTag.*$/

This is my fourth stage:
    stage: myStage4
    before_script:
        - echo "my stage 4 before script"
    script:
         - echo "my stage 4 script"
    except:
        - /^helloTag.*$/

Espero que esto te ayude.

Simplemente agregue un when: manual a los trabajos que no desea ejecutar.

Estos trabajos seguirán apareciendo en su canalización, pero no se ejecutarán, a menos que alguien los inicie “manualmente” a través de la interfaz web, de ahí el nombre.

Aquí hay más información sobre esto: https://docs.gitlab.com/ce/ci/yaml/README.html#when

Si está buscando algo más “programable”, digamos que ejecute job1 o job2 dependiendo de un nombre de rama o una etiqueta, entonces debería echar un vistazo a la only y except palabras clave: https://docs.gitlab.com/ce/ci/yaml/README.html#only-and-except

¡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 *