Files
devops-lib-gcp/README.md
T
Mukul Sharma 63eef9014b Remove unused legacy files, rewrite README for the actual system
~65 files carried over unmodified from the original org-wide library
(GKE/EKS-specific pipeline entry points, real Maven/Gradle/Node/Python/
PHP/Rust build stages entangled with AWS ECR/S3, GCP GAR/GCS, JFrog,
Sonar, a hardcoded internal security-scan endpoint, GitHub-specific
multi-branch scripting, BU/team org validation, and their supporting
pod templates/Helm value templates) — none directly usable without a
full rewrite regardless (same effort as what's already built for the
5 supported languages), so removed rather than kept as unused
reference. Also drops the Gradle wrapper (build.gradle, gradlew) — its
test suite was already removed in an earlier cleanup this session, so
nothing was left to build/test with it.

README.md rewrote entirely — it was still describing the old system
(eksCICD entry point, GKE/EKS, JFrog, S3, buTeamMapping) and even
referenced buildObjHelper.groovy, a file this same commit removes.
Only the live path remains: 7 stage files, 1 utility, 3 vars files,
the 5 language fallback Dockerfiles + Jenkinsfile template, and the
dind pod template + build-tools Dockerfile.
2026-09-03 14:49:05 +05:30

73 lines
3.6 KiB
Markdown

# devops-lib
Jenkins Shared Library for this homelab's CI/CD pipeline. Adapted from a
much larger, company-wide library — everything not needed for a
single-node homelab (GKE/EKS, JFrog, S3, Sonar, org-specific BU/team
validation, and ~65 other files covering languages/deploy-targets this
setup never uses) has been removed rather than carried along unused; see
git history if any of that is ever worth reviving.
## Using it in a service repo
The entire Jenkinsfile is 2 lines:
```groovy
@Library('devops-lib') _
homelabPipeline(repo_name: 'my-service')
```
`repo_name` is the only required key. Everything else has a sensible
default — override any of them by passing extra keys to `homelabPipeline`,
or by committing a `config.yaml` to the service repo's own root (merged
in after checkout; repo-committed values win over the Jenkinsfile call).
| Key | Default | Notes |
|---|---|---|
| `service_name` | `repo_name` | Second path segment under `devops-helm-charts/values/` |
| `argo_app_name` | `repo_name` | Must match the ArgoCD Application's `metadata.name` |
| `harbor_project` | `homelab` | Must be an existing, public Harbor project |
| `helm_repo_url` | `devops-helm-charts` on this Gitea | — |
| `image_tag_yq_path` | `.deployment.image.tag` | **Override this if the app's chart isn't `1.0.0`** — e.g. `sts-2.0.0` uses `.podtemplate.image.tag` instead. Getting this wrong doesn't fail loudly: `yq -i` creates the path if missing rather than erroring, silently leaving the real field un-bumped. |
| `dockerBuildVersion` | none | Only read when the repo has **no Dockerfile of its own** — picks a fallback template (see below). No default; either ship a Dockerfile or set this. |
## Pipeline stages
`checkOut → loadConfig → runHooks(pre_build) → buildDocker →
runHooks(post_build) → updateHelmTag → syncArgoApp → notify`, all inside
a `podTemplate` (`resources/org/homelab/dind-pod.yaml`) via
`node(POD_LABEL) { ... }`.
- **`loadConfig`** — if the repo has a `config.yaml` at its root, its
keys are merged into the pipeline config (repo values win).
- **`runHooks`** — reads `config.yaml`'s `hooks.pre_build`/`hooks.post_build`
lists, each `{name, script, interpreter, requirements, blocking,
timeout_seconds}`. Blocking by default; `blocking: false` demotes a
failure to advisory (log + continue). Script paths must be
repo-relative (no `..`, no absolute paths).
- **`buildDocker`** — uses the repo's own `Dockerfile` if present;
otherwise renders one from `resources/com/homelab/<lang>-Dockerfile`
based on `dockerBuildVersion` (e.g. `go-1.22`, `node-20`,
`python-3.12`, `java-21`, `php-8.3`). All fallback templates pull base
images from Harbor's `base-images` project (mirrored via the separate
`devops-base-images` repo), not Docker Hub directly.
- **`updateHelmTag`** — clones `devops-helm-charts`, bumps the image tag
via `yq` at `image_tag_yq_path`, commits, pushes to `main`.
- **`syncArgoApp`** — calls the ArgoCD REST API to sync `argo_app_name`.
## Adding a new language's fallback template
1. Add the base image to `devops-base-images/images.txt`, re-mirror it
into Harbor.
2. Add `resources/com/homelab/<lang>-Dockerfile`, parametrized by
`${version}` (rendered via `constructTemplate.groovy`'s
`SimpleTemplateEngine` wrapper).
3. Add a case for it in `buildDocker.groovy`'s `templates` map.
## Build-tools image
`resources/org/homelab/build-tools.Dockerfile` bakes git/yq/bash/
python3+pip/venv/curl into the `docker-cli` container's image, so
nothing gets installed on demand on every single build. Built and pushed
manually (not through any Jenkins job) — see that file's own header
comment.