1

My pipeline has 4 stages

  1. build - Should only happen on merge requests
  2. test - Should only happen on merge requests
  3. report - Should only happen on merge into master
  4. release - Should only happen on merge into master

BUILD: During the build phase I build my test container and upload it to the container registry.

TEST: During the test phase I run the tests within the container, copy out the coverage report from the container and artifact the entire report directory.

REPORT: During the reporting stage I want to copy the artifact from my reporting stage into a Gitlab page directory so we can view the report.

RELEASE: Does terraform plan apply and building the production container.

Since my report and release stages are detached, I'm unable to upload the artifact that was created in a different stage. My work around is to upload the current cov report to /public/<commit-sha> and then move it to /public when it successfully merges with master. Might not be the best solution but I have limited knowledge on gitlab's pipelines.

The issue I'm having is pretty weird.

pages:
  stage: report
  dependencies:
    - unittest
  script:
    - if [ "$CI_COMMIT_REF_NAME" == "master" ]; then mv public/$CI_COMMIT_SHA public/; else mv coverage/ public/$CI_COMMIT_SHA; fi
  artifacts:
    paths:
      - public
    expire_in: 30 days

This complains that mv: can't rename 'coverage/': No such file or directory

However this works perfectly fine

pages:
  stage: report
  dependencies:
    - unittest
  script:
    - mv coverage/ public
  artifacts:
    paths:
      - public
    expire_in: 30 days

If there's an easier solution to pass artifacts between jobs that would be great, but I'm not sure if I'm missing something really obvious in my script.

Zander Rootman
  • 2,178
  • 2
  • 17
  • 29

0 Answers0