How to: ⚪ ️ 5.8 Other, non-Node related, CI tips
:white_check_mark: **Do:** This post is focused on testing advice that is related to, or at least can be exemplified with Node JS. This bullet, however, groups few non-Node related tips that are well-known
Use a declarative syntax. This is the only option for most vendors but older versions of Jenkins allows using code or UI
Opt for a vendor that has native Docker support
Fail early, run your fastest tests first. Create a ‘Smoke testing’ step/milestone that groups multiple fast inspections (e.g. linting, unit tests) and provide snappy feedback to the code committer
Make it easy to skim-through all build artifacts including test reports, coverage reports, mutation reports, logs, etc
Create multiple pipelines/jobs for each event, reuse steps between them. For example, configure a job for feature branch commits and a different one for master PR. Let each reuse logic using shared steps (most vendors provide some mechanism for code reuse)
Never embed secrets in a job declaration, grab them from a secret store or from the job’s configuration
Explicitly bump version in a release build or at least ensure the developer did so
Build only once and perform all the inspections over the single build artifact (e.g. Docker image)
Test in an ephemeral environment that doesn’t drift state between builds. Caching node_modules might be the only exception
❌ **Otherwise:** You‘ll miss years of wisdom