Certified Jenkins Engineer

Backup and Configuration Management

Jenkins Configuration as Code JCasC

Managing Jenkins at scale demands the same declarative, version-controlled approach you use for your infrastructure. Jenkins Configuration as Code (JCasC) brings the principles of Infrastructure as Code (IaC) directly into your CI/CD server’s configuration.

Why Configuration as Code?

As organizations grow, manual server and application setup slows down delivery, introduces errors, and lacks repeatability. Infrastructure as Code tools like Ansible, Terraform, Chef, and Puppet enable you to define infrastructure declaratively:

The image illustrates "Infrastructure as Code" with tools like Ansible, Terraform, Chef, and Puppet, and highlights components such as templates, scripts, policies, network, application, storage, security, and cloud infrastructure.

Key benefits of IaC:

  • Repeatable deployments
  • Version control of infrastructure definitions
  • Faster onboarding and consistency across environments

Extending these benefits to Jenkins means you can store your CI/CD configuration in Git, automate changes, and roll back when needed.


Extending IaC to Jenkins

Jenkins Configuration as Code lets you define in code:

  • Jenkins infrastructure: agents, nodes, clouds
  • Job and pipeline definitions: steps, triggers, settings
  • Global system settings: security, credentials, plugins

You can automate Jenkins through multiple interfaces:

The image is a diagram titled "Managing Jenkins as Code," highlighting five components: Command-Line Tools, RESTful API, Client Libraries, Infrastructure as Code (IaC) Tools, and Containerization. It categorizes these under "Jenkins Infrastructure" with additional sections for "Jenkins Job Configurations" and "Jenkins System Configurations."

ApproachDescription
Jenkins CLIjenkins-cli.jar commands
REST APIHTTP endpoints for configuration and jobs
Client libraries (Java, Python, Go)SDKs to script Jenkins
IaC tools (Ansible, Chef, Terraform)Modules and playbooks for Jenkins resources
Containerization (Docker images)Prebuilt Jenkins images with custom configs

Managing Jenkins Jobs at Scale

When you have dozens or hundreds of jobs, the Jenkins web UI becomes unwieldy. Code-centric approaches include:

  • Job DSL Plugin: Define jobs using a Groovy-based domain-specific language
  • Job Builder Plugin: Write job configurations in YAML or JSON
  • Pipelines (Declarative/Scripted): Create Jenkinsfile workflows in SCM
  • Multibranch Pipeline: Automatically generate pipelines per Git branch

The image is a diagram titled "Managing Jenkins as Code," showing three main categories: Jenkins Infrastructure, Jenkins Job Configurations, and Jenkins System Configurations, with specific tools like JobDSL plugin, Job builder plugin, Jenkins Pipeline, and Multibranch listed under Job Configurations.

Note

By defining jobs in code, you get full audit trails, PR-driven changes, and reproducible pipelines.


Challenges of Manual System Configuration

Using Manage Jenkins in the UI for credentials, nodes, tools, plugins, and security:

  • Becomes time-consuming for complex setups
  • Introduces human error with repeated clicks
  • Makes consistency across multiple instances difficult

The image is about managing Jenkins as code, highlighting Jenkins Infrastructure, Job Configurations, and System Configurations, with a detailed view of system configuration options.

The image is a presentation slide about managing Jenkins as code, highlighting Jenkins infrastructure, job configurations, and system configurations, with a focus on issues like being time-consuming, error-prone, and inefficient.

Before JCasC, many teams wrote Apache Groovy init scripts to automate setup. Although powerful, these scripts:

  • Require deep knowledge of Jenkins internals
  • Depend on undocumented APIs
  • Are difficult to maintain as Jenkins evolves

The image is about managing Jenkins as code, highlighting Jenkins infrastructure, job configurations, and system configurations, with a focus on Groovy scripting and Jenkins internals.

Warning

Groovy init scripts can break after Jenkins upgrades. Prefer JCasC for long-term maintainability.


Introducing Jenkins Configuration as Code

The Jenkins Configuration as Code Plugin lets you declare your entire Jenkins controller in YAML. It mirrors the UI settings so you can:

  • Store configurations in Git for version control
  • Apply changes automatically on startup or via the UI
  • Eliminate manual form-filling and clicks
  • Reduce human errors and simplify rollbacks

After installing the plugin, navigate to Manage Jenkins → Configuration as Code → View Configuration to export a snapshot of your setup:

jenkins:
  agentProtocols:
    - "JNLP4-connect"
    - "Ping"
  crumbIssuer:
    standard:
      excludeClientIPFromCrumb: false
      disableRememberMe: false
      disabledAdministrativeMonitors:
        - "hudson.util.DoubleLaunchChecker"
  globalNodeProperties:
    - envVars:
        key: "test1"
        value: "22222222222222222222222222222222"
  labelAtoms:
    - name: "built-in"
  markupFormatter:
    rawHtml:
      disableSyntaxHighlighting: false
  mode: NORMAL
  myViewsTabBar: "standard"
  nodeMonitors:
    - "architecture"
    - "Clock"
  diskspace:
    freeSpaceThreshold: "1GB"
    freeSpaceWarningThreshold: "261B"
  tmpSpace:
    freeSpaceThreshold: "1GB"
    freeSpaceWarningThreshold: "261B"
  responseTime:
  numExecutors: 2
  primaryView:
    all:
      name: "all"
      projectNamingStrategy: "standard"
      quietPeriod: 5
      remotingSecurity:
        enabled: true
        scmCheckoutRetryCount: 3
        securityRealm:
          local:
            allowsSignup: false
            enableCaptcha: false

Note

Always commit your exported YAML to your SCM. Even without immediate customization, it provides a historical configuration record.


Structure of a JCasC YAML File

A standard JCasC YAML includes these top-level sections:

SectionPurpose
jenkinsCore system settings (security, views, executors)
toolsTool installations (JDKs, Maven, Git, etc.)
unclassifiedPlugin-specific or miscellaneous configurations
credentialsCredentials for pipelines, jobs, and system access

Additional sections may appear depending on installed plugins, nodes, clouds, and other extensions.

The image illustrates Jenkins Configuration as Code (JCasC) with a YAML file structure and a cartoon character holding a wrench. It includes sections for system settings, nodes, and cloud configurations.


Customizing Your JCasC File

Edit your YAML to tailor Jenkins. For example:

jenkins:
  systemMessage: "Welcome to the DevOps revolution!"

tools:
  maven:
    installations:
      - name: "maven-3.8.0"
        mavenHome: "/usr/share/maven"

views:
  list:
    - name: "My Jobs"
      filter: "name=.*"
    - name: "My Active Jobs"
      filter: "status != COMPLETED"

After saving changes, apply them via Manage Jenkins → Configuration as Code. No restart is required.

With JCasC, Jenkins becomes a fully automated, version-controlled service that scales with your team’s growth.


Watch Video

Watch video content

Previous
Demo Upgrading Jenkins