es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de omitir un flujo de trabajo cuando solo hay cambios en el formato de Markdown?

Objetivo

El pipeline de lanzamiento debe iniciar una implementación para ramas específicas.
Esto no debe ocurrir (omitir el trabajo) si solo hay cambios en la documentación. (archivos *.md)

El problema

Si cambias múltiples archivos, pero solo un archivo termina en .md, el trabajo de build sigue siendo omitido. El trabajo no se ejecuta para ninguno de los archivos.

https://docs.gitlab.com/ee/ci/jobs/job_control.html#onlychanges–exceptchanges-examples

Entonces, ¿es posible especificar una regla como se mencionó anteriormente?

Lo que intenté hasta ahora (un extracto)

Entonces, si "*.md" no funciona, ¿es posible revertirlo?
"**/!(*.md)" # Cada archivo excepto *.md

Esto no ejecuta nada
yml
rules:
- if: $CI_COMMIT_BRANCH == "main"
changes:
- "**/!(*.md)" # Cada archivo excepto *.md

Esto se ejecuta siempre
yml
rules:
- if: $CI_COMMIT_BRANCH == "main"
- changes:
- "**/!(*.md)"

Pregunta

¿Debo usar variables personalizadas para resolver este problema o hay una forma más sencilla?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la documentación, la palabra clave only/except changes admite patrones de glob que coinciden con los nombres de archivos modificados. Para lograr el objetivo de omitir el trabajo para ramas específicas si solo hay cambios en la documentación, podemos usar el siguiente patrón de glob:

    glob: '!(**/*.md)'
    

    Este patrón coincidiría con todos los archivos excepto aquellos que terminen con .md. Aquí hay un ejemplo de cómo se puede utilizar este patrón en un trabajo:

    deploy:
      stage: deploy
      script:
        - echo "Desplegando..."
      rules:
        - if: '$CI_COMMIT_BRANCH == "main"'
          changes:
            - glob: '!(**/*.md)'
        - when: never
          changes:
            - 'README.md'
    

    En este ejemplo, el trabajo deploy solo se ejecutará en la rama main si hay cambios en cualquier archivo excepto los archivos .md. Además, estamos usando una segunda regla que coincide con cambios solo en el archivo README.md y establece la palabra clave when en never para omitir el trabajo en caso de que la regla anterior no coincida.

    Por lo tanto, no es necesario usar variables personalizadas para resolver este problema, ya que la palabra clave changes admite patrones de glob que se pueden utilizar para especificar las condiciones deseadas.

Comments are closed.