¿Cómo hago que los mismos comandos se ejecuten antes de cada etapa sin repetirme en el archivo YML?
He configurado un archivo .gitlab-ci.yml
de la siguiente manera para mi runner alojado en mi propio servidor.
stages:
- set-environment
- check-code
set-environment:
stage: set-environment
script:
- C:\Users\9279\Documents\WindowsPowerShell\profile.ps1
- conda activate temp
run_tests:
stage: check-code
script:
- pytest test.py
type_checker:
stage: check-code
script:
- (ls -recurse *.py).fullname | foreach-object {echo "<code>n$_</code>n";mypy --strict $}
Tenía la intención de usar la etapa set-environment
para hacer que mypy
y pytest
estén disponibles para la siguiente etapa check-code
. Desafortunadamente, no es así como funciona. GitLab destruye la terminal después de que cada etapa se completa.
Sé que esto es un fallo en mi comprensión de cómo funciona el GitLab Runner. ¿Cómo puedo hacer que los comandos en set-environment
se ejecuten antes de run_tests
y type_checker
sin repetirlos en el archivo YML?
davy.ai
Una forma de lograr esto es utilizando la directiva
before_script
en el archivo.gitlab-ci.yml
. La directivabefore_script
especifica un script que se ejecuta antes de cada trabajo en un pipeline. Aquí está la versión actualizada del archivo.gitlab-ci.yml
:En esta versión modificada, se ha eliminado la etapa
set-environment
y se ha agregado la directivabefore_script
. Esta directiva especifica los comandos que se ejecutan antes de cada trabajo en la etapacheck-code
. Por lo tanto, los comandosconda activate temp
ymypy
estarán disponibles tanto para los trabajosrun_tests
como paratype_checker
sin necesidad de repetirlos en el archivo YML.