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.

¿Se puede hacer que el proceso de compilación cruzada y la etapa de prueba de GitLab CI se ejecuten en un entorno separado?

Queremos adoptar CI/CD en un proyecto que debe ser implementado en un SoC armv7. El flujo de trabajo heredado es el siguiente:

compilar el proyecto en el servidor de desarrollo x86 -> copiar el ejecutable en una placa de desarrollo -> ejecutar el ejecutable con algún caso de prueba (manualmente)

Gestionamos el proyecto con GitLab. Para automatizar todo el proceso, queremos usar GitLab CI. En general, CI tiene solo dos etapas:

stages:
 - build
 - test

armv7-build:
stage: build
script:
– mkdir -p ${CI_PROJECT_DIR}/build
– cd ${CI_PROJECT_DIR}/build
– cmake ${CI_PROJECT_DIR} -DCMAKE_TOOLCHAIN_FILE dummy.toolchain.cmake
– make -j

run-some-test:
stage: test
script:
– cd ${CI_PROJECT_DIR}/build
– ./run-some-dummy

La pregunta es, la etapa de construcción (build stage) y la etapa de prueba (test stage) deben ejecutarse en plataformas diferentes, una en el servidor de desarrollo (x86) y otra en la placa de desarrollo similar a la de producción (arm). He aprendido que uno puede usar un runner específico para diferentes tareas, pero en este caso, necesitamos pasar el artefacto de construcción de la etapa de construcción a la etapa de prueba, y no estoy seguro de si esto se puede resolver mediante la configuración del runner. ¿O simplemente estoy pensando demasiado en la pregunta y puedo simplemente usar rsync o scp para copiar los artefactos de construcción a la placa de desarrollo y luego ejecutar algún comando a través de ssh?

Agradezco sinceramente cualquier ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para ejecutar la etapa de compilación y la etapa de pruebas en diferentes plataformas, puedes utilizar los runners de GitLab con diferentes etiquetas. Por ejemplo, puedes etiquetar un runner como “build” y otro como “test”. Luego, puedes agregar las etiquetas apropiadas a cada trabajo en el archivo de configuración de GitLab CI, de la siguiente manera:

    stages:
     - build
     - test
    
    armv7-build:
      stage: build
      tags:
        - build     # Usa el runner etiquetado como "build" para este trabajo
      script:
        - mkdir -p ${CI_PROJECT_DIR}/build
        - cd ${CI_PROJECT_DIR}/build
        - cmake ${CI_PROJECT_DIR} -DCMAKE_TOOLCHAIN_FILE dummy.toolchain.cmake
        - make -j
      artifacts:
        paths:
          - ${CI_PROJECT_DIR}/build
    
    run-some-test:
      stage: test
      tags:
        - test      # Usa el runner etiquetado como "test" para este trabajo
      script:
        - scp ${CI_PROJECT_DIR}/build/run-some-dummy user@remote:/path/to/test
        - ssh user@remote /path/to/test/run-some-dummy
    

    En este ejemplo, el trabajo “armv7-build” está etiquetado como “build” y el trabajo “run-some-test” está etiquetado como “test”. El runner “build” está configurado para ejecutar la etapa de compilación y el runner “test” está configurado para ejecutar la etapa de pruebas.

    Para pasar los artefactos de compilación desde la etapa de compilación a la etapa de pruebas, puedes utilizar la funcionalidad de artefactos de GitLab CI. En el trabajo “armv7-build”, especifica la ruta de los artefactos de compilación que deseas pasar al trabajo “run-some-test”, y en el trabajo “run-some-test”, descarga los artefactos y úsalos para la etapa de pruebas.

    En cuanto a copiar los artefactos de compilación a la placa de desarrollo y ejecutar las pruebas mediante SSH, puedes utilizar los comandos de script “scp” y “ssh” en el trabajo “run-some-test”. Este enfoque es factible, pero debes asegurarte de que la placa de desarrollo tenga las dependencias y configuraciones necesarias para ejecutar las pruebas correctamente.

Comments are closed.