In Jenkins, Shared Libraries allow you to write reusable code that can be used in multiple pipelines across different Jenkinsfiles. This tutorial will guide you through creating a Jenkins Shared Library, which can simplify your pipeline scripts, promote code reuse, and improve maintainability.
Prerequisites
- Jenkins installed and running
- Basic familiarity with Groovy scripting
- Understanding of Jenkins pipelines
Steps
Step 1: Set Up Jenkins Shared Library Repository
- Create a new Git repository: Start by creating a new Git repository to host your Jenkins Shared Library. This repository will hold the reusable code that you want to share across pipelines.
- Clone the repository: Clone the newly created repository to your local machine where you will develop the Shared Library code.
Step 2: Create Directory Structure
- Inside your Git repository, create the following directory structure:
.
├── src/
│ └── org/
│ └── mycompany/
│ └── jenkins/
│ └── MySharedLibrary.groovy
├── vars/
│ └── myCustomStep.groovy
└── resources/
└── myTemplate.txt
src/
: Contains your main library code.vars/
: Contains your custom pipeline steps.resources/
: Contains any resource files your library might need (like template files).
Step 3: Write Shared Library Code
- Library Code (
MySharedLibrary.groovy
):
Here’s an example of whatMySharedLibrary.groovy
might look like:
package org.mycompany.jenkins
def call() {
// Define global variables or functions here
echo "Hello from MySharedLibrary!"
}
def sayHello(String name) {
echo "Hello, ${name}!"
}
- Custom Step (
myCustomStep.groovy
):
You can define custom steps that your pipelines can use. For example:
// Define a custom step
def call(body) {
// This block allows DSL style usage
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
// Implement the logic of your custom step
echo "Custom Step: ${config.message}"
}
- Resource File (
myTemplate.txt
):
If your library needs to include resources like template files, place them in theresources/
folder.
Step 4: Jenkins Configuration
- Configure Jenkins to use the Shared Library:
- Go to Jenkins > Manage Jenkins > Configure System.
- Scroll down to the “Global Pipeline Libraries” section.
- Click on “Add” to add a new library.
- Fill in the following:
- Name: Give your library a name (e.g.,
MySharedLibrary
). - Default version: Specify the branch or tag to use (e.g.,
main
). - Retrieval method: Choose how Jenkins should retrieve the library (e.g., Modern SCM with Git).
- Project repository: Provide the Git repository URL.
- Credentials: If needed, specify Git credentials.
- Name: Give your library a name (e.g.,
- Using the Shared Library in Jenkinsfile:
In your pipeline script (Jenkinsfile
), you can now use the Shared Library:
@Library('MySharedLibrary') _
import org.mycompany.jenkins.MySharedLibrary
pipeline {
agent any
stages {
stage('Hello') {
steps {
script {
// Call a function from the Shared Library
MySharedLibrary()
MySharedLibrary.sayHello('Alice')
}
}
}
stage('Custom Step') {
steps {
// Using the custom step
myCustomStep {
message = "Hello from Custom Step"
}
}
}
}
}
Step 5: Testing
- Commit and Push: Commit your changes to the Git repository and push them.
- Run a Pipeline:
- Create a new pipeline or update an existing one to use the Shared Library.
- Jenkins will now retrieve the Shared Library from your Git repository and use the functions and steps defined in it.
- Verify Output:
Run the pipeline and verify that the Shared Library functions and custom steps are executed correctly.
Optional: Advanced Topics
- Versioning: Consider using Git tags to version your Shared Library.
- Unit Testing: Write tests for your Shared Library code to ensure its correctness.
- Documentation: Document your Shared Library with comments and a
README.md
in the repository.
Conclusion
This promotes code reuse, simplifies pipeline scripts, and improves maintainability. As you develop more complex pipelines, you can continue to extend your Shared Library with additional functions and custom steps.