What is pipeline as code in continuous delivery/continuous deployment environment.
How to set up Multibranch pipeline to fully benefit from pipeline features.
Jenkins master-node concept in Kubernetes cluster.
5. Workflow Multibranch
Automatic Workflow (job) creation in Jenkins per new
branch in the repository (assuming webhooks are
registered from SCM to Jenkins)
Build specific to that child-branch and its unique scm
change and build history
Automatic job pruning/deletion for branches deleted from
the repository, according to the settings
Flexibility to individually configure branch properties, by
overriding the parent properties, if required
* Source: Jenkins.io
6. Organisation folder
Works on project space level within organisation SCM.
Provides ability to create and manage workflow jobs for
all repositories
Automatically removes jobs for merged back branches
Simplified configuration that requires only project name
and credentials
Provides pull request testing functionality. Jenkins will
create a new CD pipeline when a pull-request is
submitted and build/test the pull-request.
10. Pipeline definition
Pipelines are “Jenkins job definitions” enabled by the
Pipeline plugin
Based on Groovy programming language
Pipelines leverage the power of multiple steps to execute
both simple and complex tasks according to parameters
that you establish
Pipelines can build code and orchestrate the work required
to drive applications from commit to delivery
* Source: Jenkins.io
11. Pipeline attributes
Durable: Pipelines can survive both planned and unplanned
restarts of your Jenkins master.
Pausable: Pipelines can optionally stop and wait for human
input or approval before completing the jobs for which
they were built.
Versatile: Pipelines support complex real-world
requirements, including the ability to fork or join, loop,
and work in parallel with each other.
Extensible: The Pipeline plugin supports custom extensions
to its DSL (domain scripting language) and multiple
options for integration with other plugins.
* Source: Jenkins.io
12. Pipeline pros
Supports complex, real-world, CD Pipeline requirements:
pipelines can fork/join, loop, parallel, to name a few
Resilient - pipeline executions can survive master restarts
Pausable - pipelines can pause and wait for human
input/approval
Efficient - pipelines can restart from saved checkpoints
Visualized - Pipeline StageView provides status at-a-glance
dashboards including trending
Artifact traceability with fingerprinting - support tracking
versions of artifacts using file fingerprinting
13. Pipeline vocabulary
Step is a single task that is part of build sequence
Node typically enlists help from available executors on
agents to:
Schedules the steps contained within it to run by
adding them to the Jenkins build queue
Creates a workspace where resource-intensive
processing can occur without negatively impacting
your pipeline performance
Stage is a logically distinct part of the execution of any task,
with parameters for locking, ordering, and labeling its
part of a process relative to other parts of the same
process
* Source: Jenkins.io
17. The Jenkinsfile
Jenkinsfile is a container for pipeline (or other) script,
which details what specific steps are needed to perform
a job for which you want to use Jenkins.
Jenkinsfile can be created with text/Groovy editor, or
through the configuration page on of Jenkins instance.
Provides DSL steps with most common build tasks
(https://jenkins.io/doc/pipeline/steps/)
Can be extended by external shell scripts and import user
Groovy scripts
18. DSL examples
sh, bat - script execution for Unix and Windows system
scm, checkout - checkout source code from VCS
readFile, writeFile, fileExists - file handling
stash, unstash - share workspace results between stages
withEnv, evn.Foo, $BUILD_NUMBER - getting and setting
variables
parallel - set up concurrent tasks
19. node('nodeJs') {
currentBuild.result = "SUCCESS"
try {
stage('Checkout')
checkout scm
stage('Test')
env.NODE_ENV = "test"
print "Environment will be : ${env.NODE_ENV}"
sh 'node -v && npm prune && npm install && npm test'
stage('Build Docker')
sh './dockerBuild.sh'
stage('Deploy')
echo 'Push to Repo ssh to web server and tell it to pull new image'
sh './dockerPushToRepo.sh'
stage('Cleanup')
echo 'prune and cleanup'
sh 'npm prune && rm node_modules -rf'
mail body: 'project build successful', from: 'xxxx@yyyyy.com', replyTo: 'xxxx@yyyy.com', subject: 'project build successful', to:
'yyy@yy.com'
} catch (err) {
currentBuild.result = "FAILURE"
def specificCause = currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause)
mail body: "project build error is here: ${env.BUILD_URL}" , from: 'xxxx@yyyy.com', replyTo: 'yyyy@yyyy.com', subject: 'project build
failed', to: 'zz@yy.com'
throw err }}
20. Master-agent architecture
Master node has a list of all configured agents
Master node starts required Agents and passes build steps
from Jenkinsfile
All “hard work” is done by Agents
Http: 8080
Slave: 50000
Master
Agent
nodejs
Agent
java
Agent
golang
Slave: 50000
Slave: 50000
Slave: 50000
22. Jenkins usage across teams
Nana Beta Pi ...
Jenkins agent
images
Source code
+
Pipeline libraries
23. What makes "Pipeline as a code" valuable for
build/deployments in Newsweaver
Organization folders - enable Jenkins to automatically detect and include any new
repositories within them as resources.
Jenkinsfile as part of source code - A Jenkinsfile is a container for your pipeline (or
other) script, which details what specific steps are needed to perform a job for which
you want to use Jenkins.
Groovy is good - Jenkinsfiles are written as Groovy scripts which makes them easy to
write and add complex logic
Ability to record test results and artifacts
Call agent for help - build tasks can be distributed and assigned to remote nodes.
DRY - Pipeline can reuse build steps stored in SCM which can allow us to avoid code
duplication in all branches
Inputs - pipelines can be programed with pauses/human interaction
Concurrent build actions - with a help of Parallel Test Executor we can split steps in
parallel parts
24. New & noteworthy features
Blue Ocean - new UI tailored pipelines as a central theme
to the Jenkins user experience
Visual Pipeline Editor - helps to make things clearer for a
range of users, to help with Workflow adoption