user

Jenkins Terms Defined and Demystified

Introduction

Iris Chubb

Iris Chubb


LATEST POSTS

Chocolatey in the Enterprise: Privatization & Internalization 27th February, 2023

What is Maven and How Does it Work With Jenkins? 19th October, 2021

Jenkins

Jenkins Terms Defined and Demystified

Posted on .

Jenkins is one of the most popular tools DevOps tools, originally designed with one purpose in mind: be a great build automation server. It’s free and open-source, built for developers, and has lots and lots of plugins that you can configure to build anything.

If you’re new to Jenkins, need an updated glossary of terms, or want a quick refresher, this list is for you. This article will cover all the terms you need to know before diving into Jenkins.

Your Jenkins Server – An Overview

Jenkins is a free and open-source automation server. It helps automate the parts of software development related to building, testing, and deploying, facilitating Continuous Integration and Continuous Delivery. It is a server-based system that runs in servlet containers such as Apache Tomcat.

As an extensible automation server, Jenkins can be used as a simple CI server or turned into the Continuous Delivery hub for any project.

Continuous Integration (CI Build Automation)

Continuous Integration is a DevOps software development practice where developers regularly merge their code changes into source, after which automated builds and tests are run. Jenkins facilitates CI through Build Triggers and Automated Testing.

Automated Testing

Jenkins provides many plugins to integrate with test automation tools and frameworks. When it comes to testing automation, Jenkins also uses plugins for automated testing; these help run test suites, gather and dashboard results, and provide details on failures.

Provisioning a Jenkins Server

Provisioning is the process of setting up IT infrastructure. It can also refer to the steps required to manage access to data and resources and make them available to users and systems. Once something has been provisioned, the next step is configuration. Jenkins supports many plugins to assist with provisioning. Jenkins also supports Jenkins as Code (Configuration as Code). The ‘as code’ paradigm is about being able to reproduce and/or restore a full environment within minutes based on pre-programmed configurations (called recipes in Jenkins) and automation and which is managed as code.

Setting up Jenkins is a complex process, as both Jenkins and its plugins require some fine-tuning and configuration, with dozens of parameters to set within the web UI manage section.

Jenkins Configuration as Code lets you define this whole configuration as a simple, human-friendly, plain-text YAML syntax. Without any manual steps, this configuration can be validated and applied to a Jenkins controller in a fully reproducible way. With JCasC, setting up a new Jenkins controller will become a no-brainer event.

API

Jenkins provides machine-consumable remote access API to its functionalities. Currently, it comes in three flavors: XML, JSON with JSONP support, and Python.

Remote access API is offered in a REST-like style. That is, there is no single entry point for all features, and instead, they are available under the “…/api/” URL where “…” indicates the data that it acts on.

Remote API can be used to do things like:

  • Retrieve information from Jenkins for programmatic consumption
  • Trigger a new build
  • Create/copy projects

Scalability

Vertical growth is when the load on a Jenkins master/controller is increased by having more configured projects or orchestrating more frequent builds. This may also mean that more teams are depending on that one master/controller.

Horizontal growth is the creation of additional Jenkins master/controllers to accommodate new teams or projects, rather than adding new teams or projects to an existing controller.

Technical Terms and What They Mean in Jenkins

Jenkins uses certain technical terms to mean, well, technical things – and it’s easy to get confused. Here’s what Jenkins means when they use terms that have broad, general meanings.

Node

A device or data point in a larger network. In networking, a node is either a connection point, a redistribution point, or a communication endpoint.

In Jenkins, a node is a machine that is capable of executing Pipelines or Projects. Both the Controller and Agents are considered to be Nodes.
Jenkins uses the term “node” rather than “instance.“

Jenkins Controller (formerly called a Master)

The central, coordinating process that stores configuration, loads plugins, and renders the various user interfaces for Jenkins.

The basic installation of Jenkins operating along is called a “master” or “controller.” The controller handles all tasks for your build system in this configuration. A “slave” or “agent” is a computer that’s set up to offload build projects from the master. Once set up, this distribution of tasks is fairly automatic.

The Jenkins controller schedules projects, assign agents/nodes, and send builds to agents to execute projects. The controller will also monitor the agent state (offline or online), receive build result responses, and display build results on the console output.

Jenkins uses the term “controller” rather than “master,” though many community members still use the outdated term.

Agent (formerly called a Slave)

A machine or container which connects to a Jenkins controller and executes tasks when directed by the controller.

The Jenkins architecture is designed for distributed build environments. It allows users to use different environments for each build project, balancing the workload among multiple agents running projects in parallel.

The Jenkins controller is the original node in the Jenkins installation. The Jenkins controller controls the Jenkins agents and orchestrates their work, including scheduling projects on agents and monitoring agents. Agents may be connected to the Jenkins controller either locally or via the cloud.

The agents require a Java installation and a network connection to the Jenkins controller.

Jenkins uses the term “agent” rather than “slave.”

Plugin

An extension to Jenkins functionality is provided separately from Jenkins Core.

Jenkins has over 1,700 plugins that extend its functionality. You can browse the full plugins library, and plugins can be easily added through the Jenkins dashboard. Plugin functions range from adding source code management (SCM), to automating build agents using Kubernetes, to even creating custom dashboard views.

Plugins are what make Jenkins Jenkins.

Project (formerly called a Job)

A user-configured description of work that Jenkins should perform, such as building a piece of software.

A project can be considered as a particular automated task to achieve a required objective in Jenkins. Users can create and build these projects to test applications.

Jenkins uses the term “project” rather than “job.”

There are 5 different Jenkins Projects:

1. Freestyle Project

A repeatable build job, script, or pipeline that contains steps and post-build actions.

This is the central feature of Jenkins. Jenkins will build your project, combining any SCM with any build system, and this can be even used for something other than software build. This enables users to build the code and repository and has features like email notifications, triggering the builds, scheduling the jobs, etc.

A freestyle project is an improved job or task that can span multiple operations. It allows you to configure build triggers and offers project-based security for your Jenkins project. It also offers plugins to help you build steps and post-build actions.

2. Maven Project

A declarative approach where the project structure and contents are described rather than a task-based approach.

Maven is a project file format mainly for Java. Jenkins takes advantage of your Project Object Model (POM) files and drastically reduces the configuration.

3. Pipeline Project

Enables users to define build steps. Orchestrates long-running activities that can span multiple build agents.

Suitable for building pipelines (formerly known as “workflows”) and/or organizing complex activities that do not easily fit in the free-style job type.

4. Multi-Configuration Project

Suitable for projects that need many different configurations, such as testing on multiple environments, platform-specific builds, etc.

A multi-configuration project is useful for instances where your builds will make many similar build steps, and you would otherwise be duplicating steps. The Configuration Matrix allows you to specify what steps to duplicate and creates a multiple-axis graph of the type of builds to create.

5. Folder

A special type of Project. Acts as a container for all other kinds of projects.

Folders in Jenkins can be made secure with different authorization and security plugins.

Build

Result of a single execution of a Project.

Every time Jenkins runs a project, it compiles the project configuration inside the project workspace to perform the defined steps. Each run of this project is called a “build,” and each step is called a “build step.” Since the environment around the project may change from build to build, any build may fail (or become unstable) during a run.

Build Trigger

Starts a job once a specified event occurs.

Example build triggers include:

  • Trigger Build Remotely
  • Build on NuGet updates
  • Build after other projects are built
  • Build periodically
  • GitHub hook trigger for GITScm polling

Pipeline (formerly called a Workflow)

A special type of project that’s implemented through a plugin originally called “workflows.”

A pipeline project is a sequence of steps that are grouped into stages that run on a particular node. Like a project, a step could “do anything,” but it’s designed for a single, discrete task and generally is used to run other projects. There are a handful of built-in steps for things like running scripts and sending emails. Jenkins Pipelines provide an extensible set of tools for modeling simple-to-complex delivery pipelines “as code”.

The definition of a Jenkins Pipeline is written into a text file (called a Jenkinsfile) which in turn can be committed to a project’s source control repository. This is the foundation of “Pipeline-as-code,” or treating the CD pipeline as a part of the application to be versioned and reviewed like any other code.

There are a few important pipeline terms to know:

Multibranch Pipeline

Handles branches better by automatically grouping builds from different branches.

Automatically creates a new Jenkins project whenever a new branch is pushed to a source code repository. Other plugins can define various branch types, e.g., a Git branch, a Subversion branch, a GitHub Pull Request, etc.

Archived Jenkins Pipeline

Save files outside the Jenkins workspace

You can clean your workspace, run other builds, and the file archive is safe. Ex: You build the jar/html/js file, this file is important for deployment. After another build, your file is replaced or can be removed.

Pipeline Speed

Important if your Pipeline stores large files or complex data to variables in the script.

Labeled “Speed/Durability” in Jenkins. This helps keep variables in scope for future use and then runs steps. However, it will not help if your Pipelines spend almost all their time waiting for a few shell/batch scripts to finish. This ISN’T a magic “go fast” button for everything!

The Tech “Under the Hood”

Now that you know all the general terms Jenkins uses, you’ll need to know specific terms, filenames, and language. There’s a lot to learn! You might want to bookmark this page for future reference.

Jenkinsfile

A text file that contains the definition of a Jenkins Pipeline and is checked into source control.

It’s assumed that there is already a source control repository set up for the project and a Pipeline has been defined in Jenkins.

A Jenkinsfile can be written using two types of syntax: Declarative and Scripted, which are constructed fundamentally differently.

A declarative pipeline is a more recent feature of Jenkins Pipeline which:

  • provides richer syntactical features over Scripted Pipeline syntax, and…
  • is designed to make writing and reading Pipeline code easier.

Many of the individual syntactical components (or “steps”) written into a Jenkinsfile are common to both Declarative and Scripted Pipeline.

Declarative Pipeline

In Declarative Pipeline syntax, the pipeline block defines all the work done throughout your entire Pipeline. It makes the pipeline code easier to read and write. This code is written in a Jenkinsfile which can be checked into a source control management system such as Git.

Scripted Pipeline

In Scripted Pipeline syntax, one or more node blocks do the core work throughout the entire Pipeline. Although this is not a mandatory requirement of Scripted Pipeline syntax, confining your Pipeline’s work inside of a node block does two things:

  • Schedules the steps contained within the block to run by adding an item to the Jenkins queue. As soon as an executor is free on a node, the steps will run.
  • Creates a workspace (a directory specific to that particular Pipeline) where work can be done on files checked out from source control.

Artifacts

An immutable file generated during a Build or Pipeline run is archived onto the Jenkins Controller for later retrieval by users.

Artifacts can be used to represent data created as a side-effect of running a Jenkins build. Artifact files are associated with a single build. A build can have any number of artifacts associated with it.

Domain-Specific Language (DSL)

You can describe your projects in Jenkins using a Groovy Based Language. Groovy is similar to java but simpler because it’s much more dynamic. Jenkins project DSL plugin was designed to make it easier to manage projects.

Groovy

Apache Groovy is a powerful, multi-faceted language for the Java platform. It can be used to orchestrate your pipeline in Jenkins and it can glue different languages together. That means teams in your project can be contributing to it in different languages. Groovy can also be used as one of the scripting languages for the Java platform.

YAML

YAML is a standardized format that humans and computers can easily read. YAML can be used in conjunction with all programming languages and is often used to write configuration files. Jenkins enables defining pipelines with specific DSL. With a plugin, Jenkins pipelines can be defined in YAML format. The defined YAML format is converted to Jenkins Pipeline Declarative syntax in runtime.

Shell Script

A Shell script is a computer program designed to be run by the Unix shell, a command-line interpreter. The various dialects of Shell scripts are considered to be scripting languages. Typical operations performed by Shell scripts include file manipulation, program execution, and printing text.

Jenkins can call on Shell scripts.

Database

Jenkins uses the file system to store its data. Directories are created inside $JENKINS_HOME in a way that models the object model structure.

Some data, like console output, are stored just as a plain text file, and some are stored as Java property files. Everything is stored locally in XML files on the Master/Controler. You can configure Audit to Database plugin to store build data into DB using oracle, mysql, postgres, etc.

Ready to Serve

Jenkins is a job runner that is primarily used to do Continuous Integration. There are a lot of proprietary terms and it’s easy to get confused but with the help of this glossary, you’re well on your way to becoming a Jenkins master!

Jenkins an incredibly powerful tool and with the right know-how can help your team automate building and testing. To learn more about Jenkins and how it can enhance your CI/CD, why not sign up for our free eBook “Level Up Your CI/CD with Jenkins”. Download your copy today!

Iris Chubb

Iris Chubb

Navigation