Múltiples caminos con diferente tiempo de caducidad en gitlab-ci runners

7

Tengo problemas para analizar un builddirectorio entre etapas usando Gitlab-CI.

Gitlab-CI borra los artefactos de construcción creados entre etapas, lo que parece extraño. Estoy tratando de almacenar los artefactos de construcción entre la construcción y la etapa de prueba, sin embargo, la etapa de construcción también tiene el artefacto de construcción que quiero conservar y también los artefactos de construcción necesarios para ejecutar la siguiente etapa.

¿Es posible tener múltiples tiempos de vencimiento con diferentes rutas usando la artifactsopción?

He intentado lo siguiente, que solo mantiene la segunda definición de paths(las rutas de compilación / prueba *), y no la primera paths(.dmg) declarada.

  artifacts:
    paths:
    - build/*.dmg
    expire_in: 1 week
    paths:
    - build/test1
    - build/test2
    - build/test3
    expire_in: 15 mins

He intentado usar el, cachessin embargo, parece que no funciona ... ¡Cualquier sugerencia sería muy apreciada!

Rekovni
fuente

Respuestas:

5

Esto se ha respondido en SO utilizando un trabajo en torno a ver, ya que no parece posible según los documentos.

Básicamente, esto se puede hacer en 3 etapas.

Etapa 1: Construye y almacena todos los artefactos.

build_stage:
  script:
    - build
  artifacts:
    paths:
    - build/*.dmg
    - build/test1
    - build/test2
    - build/test3
    expire_in: 15 mins

Etapa 2.1: Realizar la siguiente etapa oficial del trabajo (es decir, ejecutar pruebas en mi escenario) utilizando los artefactos build/test1, build/test2y build/test3.

test_stage:
  script:
    - test
  dependencies:
  - build

Etapa 2.2: al ejecutar simultáneamente con la Etapa 2.1, puede tener un trabajo vacío pero establecer una nueva fecha de vencimiento del artefacto.

overwrite_artifact_stage:
  script:
    - echo 'saving artifact'
  artifacts:
    paths:
    - build/*.dmg
    expire_in: 1 week
Rekovni
fuente
3

Parece que está tratando de definir los artefactos globalmente, eso no funcionará con múltiples rutas ya que está sobrescribiendo la definición de la clave. En su lugar, debe definir las rutas por trabajo.

artefactos: expire_in: 1 semana

build:buildjob
    paths:
    - build/test1
    - build/test2
    - build/test3
    expire_in: 15 mins

test:testjob
      paths:
        - build/*.dmg
      artifacts:
        expire_in: 1 week
Jakub Kania
fuente
Olvidé mencionar en la pregunta que ya tengo eso definido en un trabajo. Mi trabajo de "compilación" construye tanto el artefacto como los artefactos de "prueba", sin embargo, no quiero almacenar en caché los artefactos de "prueba" ya que el caché no se borra después de la canalización.
Rekovni