GitLab pasa los valores de un Pipeline hijo al Pipeline padre.
Tengo un monorepo en el que cada paquete debe ser construido como un docker, y cuando todos los paquetes modificados sean ‘dockerizados’, quiero implementarlos usando helmfile.
He creado un trabajo de activación para cada paquete que activa un pipeline secundario.
Estoy buscando una manera de obtener los valores que se generan en el pipeline secundario, como la etiqueta de Docker o la versión del gráfico, en el pipeline principal.
Necesito esos valores para la fase de implementación que ocurre después de que se completen todos los pipelines secundarios.
.gitlab-ci.yml
---
trigger-package-a:
stage: construir
trigger:
include: .gitlab/ci/packages/package-gitlab-ci.yml
strategy: depend
rules:
- cambios:
- "packages/package-a/**/*"
variables:
PACKAGE: package-a
trigger-package-b:
stage: construir
trigger:
include: .gitlab/ci/packages/package-gitlab-ci.yml
strategy: depend
rules:
- cambios:
- "packages/package-b/**/*"
variables:
PACKAGE: package-b
done_job:
stage: implementar
script:
- "echo LISTO"
- "cat config.json"
stages:
- construir
- implementar
package-gitlab-ci.yml
stages:
- inicializar
- validar
cache:
key: "${PACKAGE}_${CI_COMMIT_REF_SLUG}"
paths:
- packages/${PACKAGE}/node_modules/
policy: pull
install-package:
stage: inicializar
script:
- echo ${PACKAGE}}
- echo '{"paquete":${PACKAGE}}' > config.json
- "cd packages/${PACKAGE}/"
- yarn install --frozen-lockfile
artifacts:
paths:
- config.json
cache:
key: "${PACKAGE}_${CI_COMMIT_REF_SLUG}"
paths:
- packages/${PACKAGE}/node_modules/
policy: pull-push
lint-package:
script:
- yarn lint
stage: validar
needs: [install-package]
before_script:
- "cd packages/${PACKAGE}/"
davy.ai
Para obtener los valores generados en el pipeline hijo, como la etiqueta de Docker o la versión de un gráfico, en el pipeline padre, puedes utilizar los artefactos y variables en GitLab CI/CD.
En el pipeline hijo, puedes definir una variable para almacenar el valor de la etiqueta de Docker o la versión del gráfico, y luego utilizar los artefactos para pasar ese valor al pipeline padre. Por ejemplo:
package-gitlab-ci.yml
En el pipeline padre, puedes utilizar la palabra clave
needs
para esperar a que todos los pipelines hijos finalicen, luego utilizar la palabra claveartifacts
para descargar el artefacto y obtener el valor de la etiqueta de Docker o la versión del gráfico. Por ejemplo:.gitlab-ci.yml
En el pipeline padre, el trabajo
done_job
espera a que los pipelines hijos finalicen utilizando la palabra claveneeds
. Luego, descarga el artefacto utilizando la palabra claveartifacts
y obtiene el valor de la etiqueta de Docker o la versión del gráfico utilizando el comandojq
. Finalmente, puedes exportar los valores como variables de entorno y utilizarlos en la fase de implementación del pipeline padre.