# hibernate-jenkins-pipeline-helpers
**Repository Path**: mirrors_hibernate/hibernate-jenkins-pipeline-helpers
## Basic Information
- **Project Name**: hibernate-jenkins-pipeline-helpers
- **Description**: Hibernate helpers for Jenkins pipelines
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-08
- **Last Updated**: 2025-08-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Hibernate helpers for Jenkins pipelines
This is a shared library containing helpers for Jenkins pipeline.
See below for documentation of the helpers.
See near the bottom of this file for help writing Groovy in a Jenkinsfile environment,
be it a Jenkinsfile or a shared library like this one.
You will also need to [configure your Jenkins instance](#jenkins-configuration).
## Using the helper steps (declarative or programmatic pipelines)
This library provides a set of helper steps that can come in handy
in both declarative and programmatic pipelines.
### requireApprovalForPullRequest
Blocks pull request builds (and only pull request builds)
pending approval from a given user group.
The approval is skipped if:
* the pull request was submitted by a member of the given user group.
* the build was triggered explicitly by a member of the given user group.
Usage:
```groovy
requireApprovalForPullRequest 'hibernate'
```
### notifyBuildResult
Usage:
```groovy
notifyBuildResult(
/**
* Space-separated emails of maintainers to notify of build results on primary branches.
* Optional, defaults to empty.
*/
maintainers: "foo@example.com bar@example.com",
/**
* Whether maintainers should always be notified.
* Optional, defaults to false.
*/
notifySuccessAfterSuccess: true
)
```
## Using the helper classes (programmatic pipelines)
This library provides a set of helper classes that can come in handy
in programmatic pipelines.
See the content of the `execute()` method in `test/SmokePipeline.groovy`
for an example of how the helpers are expected to be configured and used.
## Setup
### `Jenkinsfile`
In order to use this library, you need to explicitly import it into your Jenkinsfile, by adding this near the top (~before imports):
```groovy
@Library('hibernate-jenkins-pipeline-helpers') _
```
This relies on the library being [defined in the Jenkins instance](#jenkins-configuration-definition).
### Jenkins configuration
### Library definition and version
In order for `@Library` to work, you will need to define it in your Jenkins instance.
See [here](https://www.jenkins.io/doc/book/pipeline/shared-libraries/#defining-shared-libraries) for details.
For https://ci.hibernate.org, we define the library [globally](https://www.jenkins.io/doc/book/pipeline/shared-libraries/#global-shared-libraries),
so that we can set the (default) version globally [here](https://ci.hibernate.org/manage/configure#global-untrusted-pipeline-libraries).
### Required plugins
- https://plugins.jenkins.io/pipeline-maven
- https://plugins.jenkins.io/email-ext
- https://plugins.jenkins.io/config-file-provider
- https://plugins.jenkins.io/pipeline-utility-steps for YAML reading
- https://plugins.jenkins.io/notification for Gitter notifications
### Script approval
If not already done, you will need to allow the following calls in /scriptApproval/:
- method java.lang.Class isInstance java.lang.Object
- method java.util.Map putIfAbsent java.lang.Object java.lang.Object
- staticMethod org.jenkinsci.plugins.pipeline.modeldefinition.Utils markStageSkippedForConditional java.lang.String
- new java.lang.IllegalArgumentException java.lang.String
- new java.lang.IllegalStateException java.lang.String
- method hudson.plugins.git.GitSCM getUserRemoteConfigs
- method hudson.plugins.git.UserRemoteConfig getUrl
- method java.lang.Throwable addSuppressed java.lang.Throwable
- new java.util.LinkedHashMap
Just run the script a few times, it will fail and logs will display a link to allow these calls.
## Conventions
### "primary" branches
Branches named "main", "master" or matching the regex `/[0-9]+.[0-9]+/` will be considered as "primary" branches,
and, depending on the Jenkinsfile, may undergo additional testing.
### "tracking" branches
Branches named "tracking-" will be considered as "tracking branches",
i.e. branches containing a patch to be applied regularly
on top of a base branch, whenever that base branch changes, or another job succeeds.
In a multibranch pipeline, the specific job for each tracking branch will be configured to run:
- when the branch is updated (as usual)
- when a snapshot dependency is updated in the same Jenkins instance (as usual)
- when the base branch is built successfully
- when the Jenkins jobs mentioned in the branch name are built successfully
Also, when such branches are built, they are automatically merged with the base branch.
### Job configuration file
The job configuration file is optional. Its purpose is to host job-specific configuration, such as notification recipients.
The file is named 'job-configuration.yaml', and it should be set up using the config file provider plugin
(https://plugins.jenkins.io/config-file-provider).
```
notification:
email:
# String containing a space-separated list of email addresses to notify in case of failing non-PR builds.
recipients: ...
gitter:
# List of "secret text" credentials for Gitter chat rooms that should be notified
# Note that only global credentials will work; the notification plugin apparently doesn't handle job-scoped credentials
urlCredentialsId:
-
-
scm:
# User info for commits created during the job. Useful for releases in particular.
user:
name: ... # Defaults to 'Hibernate-CI'
email: ... # Defaults to 'ci@hibernate.org'
# Remotes to be added to git when checking out. Useful for tracking (see below) in particular.
remotes:
:
# The URL of a remote
url: ...
tracking:
# The tracking ID, used as a suffix for tracking branch names:
# if the branch is named "tracking-foo", the tracking ID will be "foo".
:
# The Git refspec to the base of this tracking branch.
# For example this can be "origin/main" or "upstream/main" (if a remote named "upstream" is defined).
base: ...
# The Jenkins jobs to track.
# Use "branchname" to reference jobs corresponding to other branches in the same multibranch job.
# Use a "/" prefix ("/somename") to reference jobs outside of the multibranch job.
tracked:
-
-
```
## Contributing & writing Jenkinsfiles
See `CONTRIBUTING.md`.