Mehrere Pfade mit unterschiedlicher Ablaufzeit bei Gitlab-CI-Läufern


7

Ich habe Probleme beim Parsen eines buildVerzeichnisses zwischen Phasen mit Gitlab-CI.

Gitlab-CI löscht die erstellten Build-Artefakte zwischen den Phasen, was seltsam erscheint. Ich versuche, die Build-Artefakte zwischen dem Build und der Testphase zu speichern. Die Build-Phase enthält jedoch auch das Build-Artefakt, das ich behalten möchte, sowie die Build-Artefakte, die zum Ausführen der nächsten Phase erforderlich sind.

Ist es mit der artifactsOption möglich, mehrere Ablaufzeiten mit unterschiedlichen Pfaden zu haben ?

Ich habe Folgendes versucht, wobei nur die zweite Definition von paths(den Build / Test * paths-Pfaden) und nicht die erste (.dmg) deklariert wird.

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

Ich habe versucht, das zu verwenden, cacheskann aber nicht scheinen, dass es funktioniert ... Irgendwelche Vorschläge wären sehr dankbar!

Antworten:


5

Dies wurde auf SO mit einem Workaround beantwortet , da es laut den Dokumenten nicht möglich erscheint.

Grundsätzlich kann dies in 3 Stufen erfolgen.

Stage 1: Build and store all artifacts.

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

Stage 2.1: Do the next official stage of the job (ie run tests in my scenario) using the artifacts build/test1, build/test2 and build/test3.

test_stage:
  script:
    - test
  dependencies:
  - build

Stage 2.2: Running concurrently with Stage 2.1 you can just have an empty job but sets a new artifact expiry date.

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

3

It seems you're trying to define the artifacts globally, that won't work with multiple paths since you're overwriting the definition of the key. Instead you should define the paths per job.

artifacts: expire_in: 1 week

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

test:testjob
      paths:
        - build/*.dmg
      artifacts:
        expire_in: 1 week

I forgot to mention in the question that I already have that defined in one job. My "build" job builds both the artifact as well as the "test" artifacts, however I don't want to cache the "test" artifacts as the cache doesn't get cleared after the pipeline.
Rekovni
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.