Skip to content

CI/CD

Purpose

Explain exactly what runs automatically on every push/PR/tag - not aspirational, the actual current pipeline definitions in this repository.

Two pipelines, two jobs

GitHub Actions Jenkins
File .github/workflows/ci.yml Jenkinsfile
Triggers every push to master/agent/**, every PR into master configured on the Jenkins job itself (multibranch pipeline / webhook) - no SCM credentials live in the Jenkinsfile
What it does restore/build/test (backend), lint/build (frontend) - fast PR-time signal full pipeline: build, dependency/image scan, Docker image, deploy to dev/staging/production
Deploys anything? No Yes - dev automatically on master, staging/production on a release tag (production behind a manual gate)

See GitHub Actions and Jenkins for the full detail on each.

Branch/tag → environment mapping (Jenkins)

any branch/PR other than master   -> build, test, scan, build local Docker images - never pushed, never deployed
master                            -> all of the above, plus push images, auto-deploy to dev
a pushed tag matching v*.*.*      -> all of the above, plus deploy to staging, smoke test,
                                      then a manual approval gate promotes the SAME image to production

Images are built once per commit and promoted unchanged dev → staging → production - nothing is ever rebuilt for a later environment (VITE_API_URL is baked in as the relative /api path in every environment; ASPNETCORE_ENVIRONMENT is a runtime env var, not a build arg - see Docker → Images).

Build/test failure behavior

A failing test, a failing lint, or a failing build stops the pipeline at that stage - nothing later (image build, push, or any deploy) ever runs. This is enforced by ordinary CI/CD semantics (a non-zero exit fails the stage, which fails the job), not extra logic.

Documentation build (this portal)

A small, separate CI job validates mkdocs build --strict on every push/PR that touches documentation - see GitHub Actions → Documentation job. It never touches the backend/frontend jobs.

Pages in this section