DEV Community

jozsefDevs
jozsefDevs

Posted on

4 3

How to debug artifact passing on Gitlab easily

How to debug artifact passing on Gitlab

Lately, I've been working a lot with GitLab pipeline files and I have now a bit more complicated setup than usual. In my case, the middle step is included from another project as a template. I had a nasty bug that from the first step artifacts were never arriving at the last step. However as per Gitlab's docs that should be working by default.

A simplified version of my gitlab-ci.yml. Inspiration from StackOverflow:

image: ubuntu:18.04

stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - echo "test result..." >> test_result.txt
  artifacts:
    paths:
    - "test_result.txt"
    expire_in: 1 day

# runs in stage build
include:
 - project: 'another-project'
   ref: 'master'
   file:
     - '/templates/build.yml' # this creates build_result.txt

# trying to debug if included step can see the artifact from before
included-build:
  script:
    # This is wrong! Overriding the included template's script section
    - cat test_result.txt

# test_result didn't arrive here at all
deploy:
  stage: deploy
  script:
    - cat test_result.txt
    - cat build_result.txt
Enter fullscreen mode Exit fullscreen mode

The Problem

So I wanted to debug why test_result.txt from the first step never arrived at the last stage.

My first thought was I can debug this by adding a script to every step in between to cat test_result.txt right? Nope!

Because the included template also introduces a script section, if I add a script section to included-build the included scripts will be overridden. Thus losing the original behavior.

🔥 Hot tip, you can always validate this by looking through the (View Merged YAML)[https://docs.gitlab.com/ee/ci/pipeline_editor/#view-expanded-configuration] tab. This way you make sure you see everything merged from templates and won't be surprised :).

The solution

I discovered that every job can have a before_script. In my case, this was not used in any steps, so I could use it with confidence. This way I can be sure I don't break any scripts already included.

# trying to debug if included step can see the artifact from before
included-build:
  when: on_success
  before_script:
    # right! Won't change the original behavior of this job
    - cat test_result.txt
Enter fullscreen mode Exit fullscreen mode

So I could add this before_script section to every job in between the first and last step, and this way found the bug easily. Hopefully, this small tip helps you as well.

🔥🔥 Extra hot tip, use the Gitlab Workflow VS Code Extension, it works with on-prem servers as well (not just official gitlab.com projects)!

You can...

  • follow your latest pipeline without stepping out from your VS Code.
  • Have CI variable auto-completion.
  • Review and create merge requests

It just works like a charm, a must-have when working with GitLab.

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay