SlideShare a Scribd company logo
1 of 117
Download to read offline
Jenkins Shared Libraries Deep Dive
Julien Pivotto (@roidelapluie)
Day of Jenkins Oslo & Gothenburg
June 2017
whoami
Julien "roidelapluie" Pivotto
@roidelapluie
Sysadmin at inuits
Automation, monitoring, HA
Jenkins user for 5+ years
inuits
Jenkins Pipeline
Were you there this morning? :-)
One of the best things that happened to
Jenkins in 5 years
Pipeline limits
What when we build 10 projects who look the
same?
How to keep Jenkinsfiles in sync?
Split deployment from application code
What if we want to interact with the heart of
Jenkins (advanced use cases)
Declarative Pipelines are limited by design
Shared Libraries ?
Why do we need that?
Why do we need that?
Put logic in Declarative Pipeline
DRY (e.g. microservices)
Scalability
Escape the Groovy Sandbox
What is a "Shared Library"?
What is a "Shared Library"?
SCM repository (git, ...)
Groovy code
Pipeline steps
Resources (plain scripts, flat files, etc)
Easily reusable in your Pipeline jobs
The 4 features
Resources
Steps
Untrusted library
Trusted library
Now let's get prepared!!
Interrupt me at any time if you
need help or have questions!!
We will move forward when most of the
people are at the same point as me
Our goals today
We will not build real things (to have low
requirements)
We will (maybe) not do the complete
slidedeck... let's see!
Requirements
Jenkins with the Git Plugin or Filesystem SCM
plugin
2 repos (gitlab, github, filesystem...) + git
client on your laptop (names: "trusted" and
"untrusted")
Python 2 ("python" command)
Open your Jenkins instance
Make sure you have SCM repos
your Jenkins has access to
You can use the Git plugin or Filesystem SCM
plugin
Install from:
https://roidelapluie.be/uploads/filesystem_scm-1.21.hpi
Login to Jenkins (as admin)
We login as admin because it is easier. The
workshop will assume that.
Install the Pipeline Plugin
Download in Progress
Done!
Check plugins installation
Raise your hand if you have
problems getting the plugins
installed
Create a folder
Save
Don't do anything with Shared Libraries at that
point, just save.
You should have the folder
Raise your hand if you don't
have the folder / have questions
Create a Pipeline Project in the
folder
Pipeline script
pipeline {
 agent any
 stages {
  stage('Clone') {
   steps {
       git url: 
       'https://github.com/voxpupuli/puppetboard'
   }
  }
  stage('Compile') {
   steps {
    sh """find . ­name '*.py' ­print0|
    xargs ­0 ­L 1 python2 ­m py_compile"""
   }
  }
 }
}
Run it!
It should run successfully
If not, raise your hand
Congratz!! We have a Python
project (vaguely) tested within
our Jenkins with a Declarative
Pipeline
Now let's see how resources
work in shared libraries
Clone your (empty) shared
library git repo on your laptop
$ git clone git@github.com:jenkinsws/untrusted01.git
$ cd untrusted01
If you use Filesystem SCM, just
create a empty directory
$ mkdir untrusted01
$ cd untrusted01
Create a directory "resources"
This must be the exact name
$ mkdir resources
Then subdirecties
$ mkdir ­p resources/eu/inuits
What did we do?
What did we do?
In the directories resources, we created a directory
for the "inuits.eu" namespace: "eu/inuits".
Namespace for "example.com" would be
"com/example".
You can nest that as you like:
"com/example/web/design".
That's kind of a Java thing.
Let's create a file in
 resources/eu/inuits called
 python.sh with the following content:
find . ­name '*.py' ­print0|
xargs ­0 ­L 1 python2 ­m py_compile
Let's commit and push the file
to the repo
$ git add resources/eu/inuits/python.sh
$ git commit ­m 'add shared script python'
$ git push
you should see
 * [new branch]      master ­> master
Raise your hand if you have problems
Wait, Shared Libraries need a
vars or src directory
I let you decide if it's a bug or a feature
Create an empty file  vars/noop.groovy 
$ mkdir vars
$ touch vars/noop.groovy
(git only)
$ git add vars/noop.groovy
$ git commit ­m 'add vars directory'
$ git push
What did we do?
What did we do?
We created our first shared pipeline!!!
Congratulations!!!!
Let's use it now
In the folder
(git)
(filesystem)
Open your Pipeline config
Import the library
At the beginning of the pipeline script
@Library('pythonhelpers') _
Replace
    sh """find . ­name '*.py' ­print0|
    xargs ­0 ­L 1 python2 ­m py_compile"""
with
    sh(libraryResource('eu/inuits/python.sh'))
Now, run the job
We should get the same result as before.
Job output
(filesystem SCM)
(git)
Raise your hand if you don't have that
We have used our first shared
resource!! Congratz!!
Let's update our library
Change  resources/eu/inuits/python.sh 
find . ­name '*.py' ­print0|
xargs ­0 ­L 1 python2 ­m py_compile
by
find . ­name '*.py' ­print0|
xargs ­0 ­t ­L 1 python2 ­m py_compile
(add -t in the second line)
Push that change
$ git add resources/eu/inuits/python.sh
$ git commit ­m 'make xargs more verbose'
$ git push
Run the script again
Before:
Now you should see
Change in our script has been integrated in the
build!! Imagine changing the script once applies to
all the pipelines!
Raise your hand if you
have problems
let's go for something more
powerful
In the shared library git repo, create a file
 vars/compilePython.groovy with
def call() {
    sh """find . ­name '*.py' ­print0|
    xargs ­0 ­t ­L 1 python2 ­m py_compile"""
}
Note: you could reuse the libraryResource here.
Push the file
$ git add vars/compilePython.groovy
$ git commit ­m 'add a compilePython step'
$ git push
In the Pipeline script
Replace
    sh(libraryResource('eu/inuits/python.sh'))
with
    compilePython()
Run, it should work!
Raise your hand if you need
help
Congratz!! Our first shared step!
Let's add LOGIC
In the shared library git repo, change
 vars/compilePython.groovy 
def call(){
 if (fileExists("requirements.txt")){
 sh "virtualenv venv"
 sh "venv/bin/pip install ­r requirements.txt"
 }
 sh """find . ­name '*.py' ­print0|
 xargs ­0 ­t ­L 1 python2 ­m py_compile"""
}
Push the file
$ git add vars/compilePython.groovy
$ git commit ­m 'add vitualenv support'
$ git push
Run the build ; should fail
Let's add a parameter
In the shared library git repo, change
 vars/compilePython.groovy 
def call(String directory = '.') {
 sh """find ${directory} ­name '*.py' ­print0|
 xargs ­0 ­t ­L 1 python2 ­m py_compile"""
}
Push the file
$ git add vars/compilePython.groovy
$ git commit ­m 'add compilePython parameter'
$ git push
Run the Pipeline again, it
should fail as before
In the Pipeline script
Replace
    compilePython()
with
    compilePython("puppetboard")
    compilePython("test")
Run, it should work!
See the two steps
Documentation
In the pipeline
In shared lib repo create
 vars/compilePython.txt 
This step compiles python files in the given
directory
Push the file
$ git add vars/compilePython.txt
$ git commit ­m 'add compilePython doc'
$ git push
Build once and check the doc
again
o/ Raise your hands if you have questions
Note
You can remove our noop.groovy in the shared
library
$ git rm vars/noop.groovy
$ git commit ­m 'remove noop.groovy'
$ git push
Let's do something awesome
now.
Remember that Declarative Pipeline?
We can do this as a "shared step".
Create  vars/pythonPipeline.groovy 
def call(String githubproject){
 pipeline {
  agent any
  stages {
   stage('Clone') {
    steps {
       git url: 
       "https://github.com/${githubproject}"
    }
   }
   stage('Compile') {
    steps{
     sh("ls")
    }
   }
  }
 }
}
Add, commit and push
$ git add vars/pythonPipeline.groovy
$ git commit ­m 'add a Python Pipeline step'
$ git push
Make the library import implicit
That way you do not need to import it in your
Pipeline script.
Change the Pipeline
pythonPipeline("voxpupuli/puppetboard")
Yes, that's all
Save & run
What happened?
We have put the COMPLETE declarative
pipeline in a shared lib
The jenkins file is really small
It is parametrizable
Change to the shared lib can change a lot of
pipelines!
Improvement: groovy closure  vars/pythonPipeline.groovy 
def call(body) {
 def config = [:]
 body.resolveStrategy = Closure.DELEGATE_FIRST
 body.delegate = config
 body()
 pipeline {
  agent any
  stages {
   stage('Clone') {
    steps {
      git url: 
        "https://github.com/${config.githubproject}"
    }
   }
   stage('Compile') {
    steps{
     sh("ls")
    }
   }
  }
 }
}
Change the Pipeline
pythonPipeline {
  githubproject = "voxpupuli/puppetboard"
}
Save & run
Let's get groovy
We will now recreate the same step but as "plain
groovy".
The real power will come later with "trusted"
library.
Reset the Pipeline script
Now we will edit the job's Pipeline and revert our
latest change. Here is the new script (next slide).
pipeline {
 agent any
 stages {
  stage('Clone') {
   steps {
    git url: 
     "https://github.com/voxpupuli/puppetboard"
   }
  }
  stage('Compile') {
   steps{
    compilePython("puppetboard")
    compilePython("test")
   }
  }
 }
}
Save and run
In Pipeline dir, create
 src/eu/inuits 
$ mkdir ­p src/eu/inuits
once again, "eu/inuits" means "inuits.eu"
Create
 src/eu/inuits/PythonCompiler.groovy 
package eu.inuits
class PythonCompiler {
 static def compileDirectory(script, directory) {
  script.sh """find ${directory} ­name '*.py' 
  ­print0|
 xargs ­0 ­t ­L 1 python2 ­m py_compile"""
 }
}
Change  vars/compilePython.groovy 
import static eu.inuits.PythonCompiler.*
def call(String directory = '.') {
    echo("Compiling ${directory}")
    compileDirectory(this, directory)
}
Push the files
$ git add src/eu/inuits/PythonCompiler.groovy
$ git add vars/compilePython.groovy
$ git commit ­m 'add PythonCompiler class'
$ git push
Run, it should work :-)
Raise your hand if it does not
What happened?
We created a plain groovy library and we called it
from within a (shared) step
If you do not use Declarative Pipeline you can do it
in your Jenkinsfile directly
Keeping State
Create a  vars/compileFile.groovy in your
shared lib.
import eu.inuits.FileCompiler
def call(String project) {
    fc = new FileCompiler(this, project)
    fc.analyze('requirements.txt')
    fc.analyze('setup.py')
}
Implement it!
 src/eu/inuits/FileCompiler.groovy 
package eu.inuits
class FileCompiler implements Serializable {
  def script
  def project
  FileCompiler(script, String project){
    this.script = script
    this.project = project
    this.script.echo("Compiling ${project}")
  }
  def analyze(String file) {
    this.script.echo("${project}/${file}")
    this.script.sh("cat ${file}")
  }
}
Add and push
(you know the drill)
$ git add src/eu/inuits/FileCompiler.groovy
$ git add vars/compileFile.groovy
$ git commit ­m "Add compileFile step"
$ git push
In the Pipeline script
Replace
    compilePython("puppetboard")
    compilePython("test")
with
    compileFile("puppetboard")
Run it
ooops
We hit the security sandbox
In the Pipeline script
& run again! Should work!
What happened? We have a "state" (variable
project). It can be changed on the fly in the class,
etc...
Are you still following?
Global Trusted Library
Now let's look into another kind of global library:
the Trusted Libraries.
Those libraries are defined in the global config,
and run unsandboxed.
Clone a new git repo for your
trusted library
$ git clone git@github.com:jenkinsws/trusted01.git
$ cd trusted01
Add the Library as a Global Shared
Library
Same as we did before but in the global config
Global Libraries
Used with caution: can do everything
Unsandboxed
Let's go!
create  src/eu/inuits/Admin.groovy 
package eu.inuits
import com.cloudbees.groovy.cps.NonCPS
class Admin implements Serializable {
 def seedFullName = "seed"
 def script
 
 Admin(script) {
  this.currentJobValidation(script)
  this.script = script
 }
 @NonCPS
 void currentJobValidation(script){
  def name = 
    script.currentBuild.rawBuild.project.fullName
  assert name == this.seedFullName : "DENIED"
 }
}
Add and commit file
$ git add src/eu/inuits/Admin.groovy
$ git commit ­m 'add admin lib'
$ git push
Raise your hand if you need help!
Create a new job in the top
Set the following Pipeline Script
@Library('globalhelp') _
import eu.inuits.Admin
node {
    adm = new Admin(this)
}
And save.
Run the Pipeline
Rename the job
Run the renamed job
Our class can only be called from within a job
named seed.
Rename the job back
Who needs help at this point?
Add a function to the trusted lib
 src/eu/inuits/Admin.groovy 
after Package, before Class
import jenkins.model.Jenkins
then, in body
/**
  * Set the description of a folder
  *
  * @param folder A jenkins project name
  * @param description New description
  */
@NonCPS
void setFolderDescription(folder, description) {
    def f = Jenkins.instance.getItemByFullName(folder)
    f.setDescription(description)
}
Add, Commit and Push
$ git add src/eu/inuits/Admin.groovy
$ git commit ­m 'add setFolderDescription'
$ git push
Change seed job Pipeline Script
@Library('globalhelp') _
import eu.inuits.Admin
node {
  adm = new Admin(this)
  adm.setFolderDescription("python­projects",
  "Description set withing Global Pipeline")
}
Save and Run
Check the result
Raise your hand if you have a different result
@Grab
Just an example from
https://jenkins.io/doc/book/pipeline/shared-libraries/
@Grab('org.apache.commons:commons­math3:3.4.1')
import org.apache.commons.math3.primes.Primes
void parallelize(int count) {
  if (!Primes.isPrime(count)) {
    error "${count} was not prime"
  }
  // Ã¢â‚¬Â¦
}
Global Libs
Do not require sandbox escape at the job level
No sandbox exceptions needed
@Grab
Freedom!
Advice for safe global lib
Check what you return: void, string.. do not
return objects like Jenkins Job
Check the name of the job
No "implicit loading"
No "version overwrite"
Conclusions
Shared Libraries keep your Jenkinsfiles small
They allow you to scale your Pipelines
Change the build process without comitting to
all the repos
No need for tools like modulesync etc...
For this talk, thanks Jenkins, Praqma, Inuits.
Used for this talk: DigitalOcean, github, packer,
consul, terraform, traefik, let's encrypt,
gibby/letsencrypt-dns-digitalocean.
Julien Pivotto
roidelapluie
roidelapluie@inuits.eu
Inuits
https://inuits.eu
info@inuits.eu
Contact

More Related Content

What's hot

Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes NetworkingCJ Cullen
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)Gourav Varma
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker, Inc.
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaEdureka!
 
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...Amazon Web Services
 
AWS PrivateLink - Deep Dive
AWS PrivateLink - Deep DiveAWS PrivateLink - Deep Dive
AWS PrivateLink - Deep DiveEnri Peters
 
Build CICD Pipeline for Container Presentation Slides
Build CICD Pipeline for Container Presentation SlidesBuild CICD Pipeline for Container Presentation Slides
Build CICD Pipeline for Container Presentation SlidesAmazon Web Services
 
Continuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and HelmContinuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and HelmDavid Currie
 
CI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateCI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateAmazon Web Services
 
Programming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDKProgramming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDKDonnie Prakoso
 
AWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your Infrastructure as CodeAWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your Infrastructure as CodeAmazon Web Services
 
Git slides
Git slidesGit slides
Git slidesNanyak S
 
Monitoring kubernetes with prometheus
Monitoring kubernetes with prometheusMonitoring kubernetes with prometheus
Monitoring kubernetes with prometheusBrice Fernandes
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking OverviewSreenivas Makam
 

What's hot (20)

Docker
DockerDocker
Docker
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)
 
AWS CDK Introduction
AWS CDK IntroductionAWS CDK Introduction
AWS CDK Introduction
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
 
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
Amazon Virtual Private Cloud (VPC): Networking Fundamentals and Connectivity ...
 
AWS PrivateLink - Deep Dive
AWS PrivateLink - Deep DiveAWS PrivateLink - Deep Dive
AWS PrivateLink - Deep Dive
 
Build CICD Pipeline for Container Presentation Slides
Build CICD Pipeline for Container Presentation SlidesBuild CICD Pipeline for Container Presentation Slides
Build CICD Pipeline for Container Presentation Slides
 
AWS CloudFormation Masterclass
AWS CloudFormation MasterclassAWS CloudFormation Masterclass
AWS CloudFormation Masterclass
 
Continuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and HelmContinuous Delivery to Kubernetes with Jenkins and Helm
Continuous Delivery to Kubernetes with Jenkins and Helm
 
CI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateCI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and Fargate
 
Introduction to container based virtualization with docker
Introduction to container based virtualization with dockerIntroduction to container based virtualization with docker
Introduction to container based virtualization with docker
 
Programming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDKProgramming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDK
 
AWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your Infrastructure as CodeAWS January 2016 Webinar Series - Managing your Infrastructure as Code
AWS January 2016 Webinar Series - Managing your Infrastructure as Code
 
Git slides
Git slidesGit slides
Git slides
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
CI/CD on AWS
CI/CD on AWSCI/CD on AWS
CI/CD on AWS
 
Monitoring kubernetes with prometheus
Monitoring kubernetes with prometheusMonitoring kubernetes with prometheus
Monitoring kubernetes with prometheus
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking Overview
 

Similar to Jenkins Shared Libraries Workshop

Make an Instant Website with Webhooks
Make an Instant Website with WebhooksMake an Instant Website with Webhooks
Make an Instant Website with WebhooksAnne Gentle
 
The Scientific Filesystem
The Scientific FilesystemThe Scientific Filesystem
The Scientific FilesystemVanessa S
 
Hacktoberfest 2020 - Open source for beginners
Hacktoberfest 2020 - Open source for beginnersHacktoberfest 2020 - Open source for beginners
Hacktoberfest 2020 - Open source for beginnersDeepikaRana30
 
Deploying to DigitalOcean With GitHub Actions
Deploying to DigitalOcean With GitHub ActionsDeploying to DigitalOcean With GitHub Actions
Deploying to DigitalOcean With GitHub ActionsDigitalOcean
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Takayuki Shimizukawa
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using SwiftDiego Freniche Brito
 
Github 101 An Adventurer's Guide To Open Source
Github 101   An Adventurer's Guide To Open SourceGithub 101   An Adventurer's Guide To Open Source
Github 101 An Adventurer's Guide To Open SourcePrachitibhukan
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Henry Schreiner
 
Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...
Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...
Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...DrupalCape
 
Scientist meets web dev: how Python became the language of data
Scientist meets web dev: how Python became the language of dataScientist meets web dev: how Python became the language of data
Scientist meets web dev: how Python became the language of dataGael Varoquaux
 
Singularity Registry HPC
Singularity Registry HPCSingularity Registry HPC
Singularity Registry HPCVanessa S
 
Introduction to Git for Non-Developers
Introduction to Git for Non-DevelopersIntroduction to Git for Non-Developers
Introduction to Git for Non-DevelopersAll Things Open
 
Introduction to Git for Non-Developers
Introduction to Git for Non-DevelopersIntroduction to Git for Non-Developers
Introduction to Git for Non-DevelopersJohn Anderson
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedHoward Greenberg
 
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingHenry Schreiner
 
Leiningen2 - humane build management for clojure
Leiningen2 - humane build management for clojureLeiningen2 - humane build management for clojure
Leiningen2 - humane build management for clojureJohn Stevenson
 
Introduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech ArticleIntroduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech ArticlePRIYATHAMDARISI
 

Similar to Jenkins Shared Libraries Workshop (20)

Take a Stroll in the Bazaar
Take a Stroll in the BazaarTake a Stroll in the Bazaar
Take a Stroll in the Bazaar
 
Make an Instant Website with Webhooks
Make an Instant Website with WebhooksMake an Instant Website with Webhooks
Make an Instant Website with Webhooks
 
The Scientific Filesystem
The Scientific FilesystemThe Scientific Filesystem
The Scientific Filesystem
 
Hacktoberfest 2020 - Open source for beginners
Hacktoberfest 2020 - Open source for beginnersHacktoberfest 2020 - Open source for beginners
Hacktoberfest 2020 - Open source for beginners
 
Deploying to DigitalOcean With GitHub Actions
Deploying to DigitalOcean With GitHub ActionsDeploying to DigitalOcean With GitHub Actions
Deploying to DigitalOcean With GitHub Actions
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
Github 101 An Adventurer's Guide To Open Source
Github 101   An Adventurer's Guide To Open SourceGithub 101   An Adventurer's Guide To Open Source
Github 101 An Adventurer's Guide To Open Source
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024
 
Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...
Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...
Bang a Gong, GIT It On, or Running Drupal With a GIT Repository (11/04/20 - B...
 
Scientist meets web dev: how Python became the language of data
Scientist meets web dev: how Python became the language of dataScientist meets web dev: how Python became the language of data
Scientist meets web dev: how Python became the language of data
 
Singularity Registry HPC
Singularity Registry HPCSingularity Registry HPC
Singularity Registry HPC
 
Jenkins Pipelines
Jenkins PipelinesJenkins Pipelines
Jenkins Pipelines
 
Untangling4
Untangling4Untangling4
Untangling4
 
Introduction to Git for Non-Developers
Introduction to Git for Non-DevelopersIntroduction to Git for Non-Developers
Introduction to Git for Non-Developers
 
Introduction to Git for Non-Developers
Introduction to Git for Non-DevelopersIntroduction to Git for Non-Developers
Introduction to Git for Non-Developers
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub Explained
 
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meeting
 
Leiningen2 - humane build management for clojure
Leiningen2 - humane build management for clojureLeiningen2 - humane build management for clojure
Leiningen2 - humane build management for clojure
 
Introduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech ArticleIntroduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech Article
 

More from Julien Pivotto

What's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemWhat's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemJulien Pivotto
 
Prometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingPrometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingJulien Pivotto
 
What's new in Prometheus?
What's new in Prometheus?What's new in Prometheus?
What's new in Prometheus?Julien Pivotto
 
Introduction to Grafana Loki
Introduction to Grafana LokiIntroduction to Grafana Loki
Introduction to Grafana LokiJulien Pivotto
 
Why you should revisit mgmt
Why you should revisit mgmtWhy you should revisit mgmt
Why you should revisit mgmtJulien Pivotto
 
Observing the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusObserving the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusJulien Pivotto
 
Monitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusMonitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusJulien Pivotto
 
5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery5 tips for Prometheus Service Discovery
5 tips for Prometheus Service DiscoveryJulien Pivotto
 
Prometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionPrometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionJulien Pivotto
 
Powerful graphs in Grafana
Powerful graphs in GrafanaPowerful graphs in Grafana
Powerful graphs in GrafanaJulien Pivotto
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress ControllerJulien Pivotto
 
Improved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerImproved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerJulien Pivotto
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with KeycloakJulien Pivotto
 
Monitoring as an entry point for collaboration
Monitoring as an entry point for collaborationMonitoring as an entry point for collaboration
Monitoring as an entry point for collaborationJulien Pivotto
 
Incident Resolution as Code
Incident Resolution as CodeIncident Resolution as Code
Incident Resolution as CodeJulien Pivotto
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusJulien Pivotto
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusJulien Pivotto
 
An introduction to Ansible
An introduction to AnsibleAn introduction to Ansible
An introduction to AnsibleJulien Pivotto
 

More from Julien Pivotto (20)

The O11y Toolkit
The O11y ToolkitThe O11y Toolkit
The O11y Toolkit
 
What's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemWhat's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its Ecosystem
 
Prometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingPrometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is coming
 
What's new in Prometheus?
What's new in Prometheus?What's new in Prometheus?
What's new in Prometheus?
 
Introduction to Grafana Loki
Introduction to Grafana LokiIntroduction to Grafana Loki
Introduction to Grafana Loki
 
Why you should revisit mgmt
Why you should revisit mgmtWhy you should revisit mgmt
Why you should revisit mgmt
 
Observing the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusObserving the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From Prometheus
 
Monitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusMonitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with Prometheus
 
5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery
 
Prometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionPrometheus and TLS - an Introduction
Prometheus and TLS - an Introduction
 
Powerful graphs in Grafana
Powerful graphs in GrafanaPowerful graphs in Grafana
Powerful graphs in Grafana
 
YAML Magic
YAML MagicYAML Magic
YAML Magic
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress Controller
 
Improved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerImproved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and Alertmanager
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with Keycloak
 
Monitoring as an entry point for collaboration
Monitoring as an entry point for collaborationMonitoring as an entry point for collaboration
Monitoring as an entry point for collaboration
 
Incident Resolution as Code
Incident Resolution as CodeIncident Resolution as Code
Incident Resolution as Code
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
An introduction to Ansible
An introduction to AnsibleAn introduction to Ansible
An introduction to Ansible
 

Recently uploaded

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Recently uploaded (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

Jenkins Shared Libraries Workshop