GitLab CI runs on remote runners; capture all environment setup in
.gitlab-ci.yml and do not rely on local machine files.
Use a CVMFS-enabled Kubernetes runner tag (e.g.,
k8s-cvmfs); the image: keyword is only honored
on Kubernetes runners; verify /cvmfs/cms.cern.ch is
accessible.
Set up CMSSW with cmsset_default.sh,
SCRAM_ARCH, cmsrel, and cmsenv,
then validate with cmsRun --help.
Temporarily relax shell strict mode (set +u …
set -u) around setup to avoid failures from unset variables
or non-standard exit codes; inspect job logs to diagnose issues.
GitLab CI runs on remote runners; every dependency and setup step
must be in .gitlab-ci.yml.
Use CVMFS-enabled Kubernetes runners (k8s-cvmfs); the
image: keyword is honored only there.
Split the pipeline into stages and pass the built CMSSW area via
artifacts to avoid rebuilding in each job.
Validate outputs in CI (e.g., myZPeak.root, event
counts) to catch issues early; inspect job logs for failures.
Artifacts are write-protected by default; downstream jobs must copy
them to a writable directory using mkdir,
cp -r, and chmod -R +w.
Define artifacts with untracked: true to capture build
outputs, and set expire_in to control automatic cleanup
(e.g., 1 hour for testing, 1 week for
production).
Use the needs keyword for faster pipelines—jobs start
immediately when dependencies complete, rather than waiting for entire
stages to finish. dependencies is an alternative that
strictly respects stage order.