Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/releaseworks/jenkinslib
Easy-to-use helper functions for Jenkinsfiles
https://github.com/releaseworks/jenkinslib
ci continuous-delivery jenkins jenkins-pipeline jenkinsfile
Last synced: 2 months ago
JSON representation
Easy-to-use helper functions for Jenkinsfiles
- Host: GitHub
- URL: https://github.com/releaseworks/jenkinslib
- Owner: releaseworks
- License: mit
- Created: 2019-03-07T13:55:13.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-11-12T10:45:55.000Z (about 5 years ago)
- Last Synced: 2024-09-30T18:06:17.064Z (3 months ago)
- Topics: ci, continuous-delivery, jenkins, jenkins-pipeline, jenkinsfile
- Language: Groovy
- Homepage: https://release.works
- Size: 13.7 KB
- Stars: 20
- Watchers: 4
- Forks: 10
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Jenkins Libraries
This repository includes helper functions for making life easier with Jenkins and Jenkinsfiles.## Usage
Place this at the top of your Jenkinsfile:
```
@Library('github.com/releaseworks/jenkinslib') _
```
_(Note the trailing underscore!)_## Function Reference
Available functions:
* [SlackMessage](#slackmessage)
* [Terraform](#terraform)
* [AWS](#slackmessage)
* [withElasticContainerRegistry](#withelasticcontainerregistry)### SlackMessage
This function posts a message to a Slack channel from a Jenkinsfile using a Slack Incoming Webhook. Create a Slack incoming webhook with these instructions: https://get.slack.help/hc/en-gb/articles/115005265063-Incoming-webhooks-for-SlackUsage:
```
SlackMessage(webhookUrl: 'https://hooks.slack.com/XXXX',
channel: '',
color: 'good',
username: 'Jenkins',
message: '')
```Example:
```
SlackMessage(webhookUrl: "https://hooks.slack.com/XXXX",
channel: "#ci",
message: "Build succeeded!")
```Replace the webhookUrl value with your unique webhook URL.
An advanced example for catching errors with a try-catch block:
```
try {
def url = 'https://hooks.slack.com/XXXX'stage('Build app') {
// your build steps here
}stage('Post notification') {
SlackMessage(webhookUrl: url,
channel: "#ci",
message: "Build succeeded for ${env.JOB_NAME}!")
}} catch(error) {
SlackMessage(webhookUrl: url,
channel: "#ci",
message: "Build failed: $error - <${env.BUILD_URL}|view logs>")
throw error
}
```### Terraform
Run Terraform commands in a Jenkinsfile. See https://terraform.ioThis command requires the Docker Pipeline plugin and a working Docker server.
Usage:
```
Terraform(command, version)
```The version defaults to the latest version.
The following environment variables, if set, are passed to Terraform: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_DEFAULT_REGION`, `TF_INPUT`, `TF_LOG`, `TF_LOG_PATH`, `TF_CLI_ARGS`.
Example:
```
Terraform("plan")
Terraform("apply -var-file=environment.tfvars")
Terraform("validate", "0.11.11")
```### AWS
Run AWS CLI commands in a Jenkinsfile.This command requires the Docker Pipeline plugin and a working Docker server.
Usage:
```
AWS(command)
```The following environment variables, if set, are passed to AWS CLI: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_DEFAULT_REGION`.
Example:
```
withEnv(["AWS_ACCESS_KEY_ID=abc", "AWS_SECRET_ACCESS_KEY=def", "AWS_DEFAULT_REGION=eu-west-1"]) {
AWS("ec2 describe-instances")
}AWS("s3 ls")
```Note: Adding AWS API credentials into your pipeline code is not recommended. Use Jenkins Credentials (and a `withCredentials() { .. }` block), or IAM Roles.
### withElasticContainerRegistry
Run build steps when authenticated to an AWS Elastic Container Registry (ECR).This command requires the Docker Pipeline plugin and a working Docker server.
Usage:
```
withElasticContainerRegistry {
// build steps here
}
```The following environment variables, if set, are passed to AWS CLI for authentication: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_DEFAULT_REGION`.
Example:
```
withEnv(["AWS_ACCESS_KEY_ID=abc", "AWS_SECRET_ACCESS_KEY=def", "AWS_DEFAULT_REGION=eu-west-1"]) {
withElasticContainerRegistry {
// Build image in the current working directory
def app = docker.build("ACCOUNT-ID.dkr.ecr.eu-west-1.amazonaws.com/app")// Push to ECR
app.push("${env.BUILD_NUMBER}")
}
}
```Note: Adding AWS API credentials into your pipeline code is not recommended. Use Jenkins Credentials (and a `withCredentials() { .. }` block), or IAM Roles.
## Contributing
All pull requests are very welcome.