Mukul Sharma e0572db0f4 Add set -e and safe.directory to updateHelmTag's git clone
Build failed: "Cloning into '.'..." with no further output, then
git config later failing "fatal: not in a git directory" despite the
cloned file being present and editable. Likely cause: this stage just
started running in container('docker-cli') (root — docker:27-cli's
base has no non-root USER) right when it broke, while deleteDir()
just before it runs via the Jenkins agent's own JNLP process (a
different, non-root UID) — git refuses to trust a repo directory
owned by a different UID than the current process, and that refusal
can surface as an unrelated-looking error on a later command rather
than a clear ownership error on the clone itself. Adds
`git config --global --add safe.directory '*'` (safe here — this
workspace is a throwaway, container-local checkout for one build) and
set -e so a genuinely failed clone stops the script immediately
instead of running later commands against partial state.
2026-09-03 08:33:02 +05:30
2026-08-26 02:02:24 +05:30
2026-08-26 02:02:24 +05:30
2026-08-26 02:02:24 +05:30
2026-08-26 02:02:24 +05:30

devops-lib


Parameters

Most of the functionality depends on the parameters provided by the users in form of groovy map of key and value pairs. The supported parameters are as below:

Required parameters

repo_name: The key repo_name is required for checking out the code in a subdirectory. The value is the repository name that you want to checkout

build_tool: This parameter is required to identify which build_tool to use in the pipeline. The supported values are maven, gradle, docker, python, node, go, php (and their prefixed variants such as maven-3.3-jdk-17, python-3, node-16, go1.21)

maintainer : This parameter is required to send the notification in the slack channel #ci-cd-status. Please provide your slack username here

Optional parameter

devops-lib is Homelab's Jenkins Shared Library that provides a unified CI/CD pipeline for all microservices across the organisation. Consumer repos load it via @Library('devops-lib@main') and call a single eksCICD(repo) entry point — the library handles language-specific building (Maven, Go, Gradle, Node.js, Python, PHP), code quality gates (Sonar), Docker image publishing to GAR/ECR, Helm chart updates, and ArgoCD-based deployment to GKE/EKS clusters. Build status and deployment metadata are reported back to Ringmaster and Slack.

Stack: Groovy (Jenkins Shared Library) · ArgoCD · Helm · GCP (GKE, GAR, GCS, Vault, Sonar) · AWS (EKS, ECR, S3)

Dependencies

push_to_jfrog: By default master, main, gcp-main, and gcp-master branches push artifacts to jfrog/s3 repository, set this parameter to true to push artifacts from non-master branches


config.yaml schema (consumer services)

Every service that uses this library must provide a config.yaml:

Key Required Description
repo_name yes GitHub repo slug — must match exactly
build_tool yes maven, go, gradle, node-*, python-*, php, docker
dockerBuildVersion yes Drives Dockerfile template: maven-21, go-1.22, node-20, etc.
team yes Team slug — validated against buTeamMapping
bu yes Business unit: supply, demand, central, dataengg, datascience, mcache, infra
maintainer yes GitHub handle for Slack notifications
deployment_order yes List of ArgoCD application names to deploy
notify_channel no Slack channel (default: ci-cd-status)
skip_sonar no Whitelist-gated; see constructParam.groovy
deployArgo no Set false to skip ArgoCD sync
appConfigEnabled no Required true for stg; whitelist-gated
skip_test no Skip unit tests (Maven)
push_to_jfrog no Publish JAR to JFrog Artifactory
push_to_s3 no Push artifact to S3
build_packages no System development packages required while compiling (currently consumed by Rust builds; for example libpq-dev)
runtime_packages no System runtime libraries required by the compiled binary (currently consumed by Rust builds; for example libpq5)

Adding this library to a new service

// Jenkinsfile
@Library('devops-lib@main') _

eksCICD([
  repo_name: 'my-service'
])

Place config.yaml at the repo root with the required fields above.

Adding a new build stage

  1. Create src/com/homelab/stages/build<Lang>.groovy implementing def run(Map config).
  2. Add a case in src/com/homelab/stages/buildObjHelper.groovy.
  3. Add a Dockerfile template in resources/com/homelab/<lang>-Dockerfile if needed.
S
Description
No description provided
Readme
446 KiB
Languages
Groovy 100%