djna
¿Cómo evito que se active una tubería gitlab ci cuando agrego una etiqueta git? Estoy ejecutando este comando localmente (a diferencia de un trabajo de gitlab-ci)
git tag -a "xyz"
y luego empujando la etiqueta; y esto desencadena varias canalizaciones. Quiero excluir la ejecución de algunas de esas canalizaciones.
Estoy probando variaciones de ideas a partir de preguntas como esta; esa pregunta esta usando solamente, Quiero excluir, así que intento excepto. Las respuestas allí tienen dos variantes, una con árbitros uno sin
build:
# ... my work here ...
except:
- tags
build:
# ... my work here ...
except:
refs:
- tags
Ninguno parece tener ningún efecto; Agrego una etiqueta, la compilación aún sucede.
Mi comprensión puede estar completamente equivocada aquí, ya que parece haber tres posibles significados de la palabra etiquetas y cuando leo documentos o ejemplos, no siempre estoy seguro de qué significado es aplicable:
- Etiquetas Git aplicadas usando etiqueta git
- Etiquetas CI de Gitlab utilizadas para determinar qué corredores eligen un trabajo
- los árbitro identificador de una confirmación utilizada para desencadenar una canalización a través de la API REST. Este suele ser un nombre de rama, pero podría ser una etiqueta de git.
Me interesa controlar lo que pasa si es el primer caso. Parece claro a partir de los comentarios hasta ahora que “excepto: -etiquetas” no es relevante para mi caso, entonces, ¿hay algún enfoque que funcione?
makozaki
Except tags
es exactamente lo que debe usar si desea omitir la creación de etiquetas.
Debe asegurarse de comprender el compromiso frente a las ramas frente a las etiquetas
Para ilustrar lo que sucede cuando presionas la confirmación etiquetada en gitlab, hice lo siguiente:
- Creado
.gitlab-ci.yml
con el siguiente contenido:
tests_always_run:
script:
- echo I should always execute
tests_except_tags:
script:
- echo I skip tagged triggers
except:
- tags
- Cambios confirmados, confirmados etiquetados y empujados con
--follow-tags
para asegurarse de que la etiqueta también se propague al servidor:
git add .gitlab-ci.yml
git commit -m 'my great yml with except tags'
git tag -a "abc" -m "Test tag"
git push --follow-tags
Si desea omitir CI para la confirmación seleccionada, puede usar git push -o ci.skipinspirado por Este artículo
diegosasw
Parece que GitLab recomienda usar rules
en vez de except
según la documentación
sólo y excepto no se están desarrollando activamente. rules es la palabra clave preferida para controlar cuándo agregar trabajos a las canalizaciones.
asi seria
your_job:
stage: your_stage
script:
- echo "Hello"
rules:
- if: $CI_COMMIT_TAG
when: never
- when: always
-
@diegosaw, gracias. Todavía estamos en v12 donde los documentos dicen: “Nota: la sintaxis de las reglas ahora es el método preferido para establecer políticas de trabajo. Solo y excepto son candidatos para la desaprobación y pueden eliminarse en el futuro”. Me alegro de que me hayas llamado la atención.
– djna
26 de junio de 2021 a las 5:47
LeGEC
(nota: este es un comentario con formato más que una respuesta)
Para depurar las condiciones que desencadenan su canalización:
documento de gitlab menciona varias variables que se establecen cuando se ejecuta un trabajo de CI, entre las cuales:
CI_COMMIT_REF_NAME
: El nombre de la rama o etiqueta para la que se construye el proyectoCI_COMMIT_BRANCH
: El nombre de la rama de confirmación. Presente solo al construir ramas.CI_COMMIT_TAG
: El nombre de la etiqueta de confirmación. Presente solo al crear etiquetas.
Haga que su trabajo de compilación genere algunas de estas variables (por ejemplo: echo "triggered by ref : " $CI_COMMIT_REF_NAME
) para ver qué desencadenó su trabajo.
Yo estaba en la misma situación, mi solución fue esta:
Ambas etapas están configuradas en mi archivo .gitlab-ci.yml, con diferente nombre The “Pruebas unitarias de desarrollo“, solo se ejecuta cuando alguien se compromete con el repositorio, sin efecto en etiquetas y la rama”prueba“
Dev-UnitTests:
stage: pruebas
script:
- mvn $MAVEN_CLI_OPTS test
artifacts:
when: always
reports:
junit:
- target/surefire-reports/*Test.xml
- target/failsafe-reports/*Test.xml
cobertura: target/site/jacoco/jacoco.xml
tags:
- shell
except:
- test
- tags
los Pruebas unitarias solo se ejecuta cuando se realiza una fusión en la rama prueba
Unit Tests:
stage: pruebas
script:
- mvn $MAVEN_CLI_OPTS test
artifacts:
when: always
reports:
junit:
- target/surefire-reports/*Test.xml
- target/failsafe-reports/*Test.xml
cobertura: target/site/jacoco/jacoco.xml
tags:
- shell
only:
- test
Eso no volvió a ejecutar ningún pipeline al crear una etiqueta, espero que te ayude.
La clave es:
...
except:
- tags
...
Por docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic esto se refiere a las etiquetas git. También puede ver información sobre la estrategia de referencias en esa página. Tenga en cuenta que habrá dos compilaciones para una confirmación etiquetada; uno para la confirmación, uno para la etiqueta.
– jonrsharpe
22 de febrero de 2020 a las 11:20
Gracias @jonrsharpe. Estoy de acuerdo en que eso es lo que dicen los documentos que es el sentido de “etiqueta”. ¿Hay alguna forma de evitar que estas compilaciones se deban a las etiquetas git?
– djna
22 de febrero de 2020 a las 20:58
Estas usando
git tag -a TAG
localmente y luegogit push origin TAG
? O elgit tag
El mando es parte de tu.gitlab-ci.yml
trabajos ?– Nicolás Pepinster
24 de febrero de 2020 a las 9:42
@Nicolas Pepinster: corriendo localmente y presionando, agregó esa aclaración
– djna
24 de febrero de 2020 a las 12:06