#!/usr/bin/env groovy
/**
* Send notifications based on build status string
*/
def call(String buildStatus = 'STARTED') {
// build status of null means successful
buildStatus = buildStatus ?: 'SUCCESS'
// Default values
def colorName = 'RED'
def colorCode = '#FF0000'
def subject = "${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'"
def summary = "${subject} (${env.BUILD_URL})"
def details = """<p>${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>Check console output at "<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>"""
// Override default values based on build status
if (buildStatus == 'STARTED') {
color = 'YELLOW'
colorCode = '#FFFF00'
} else if (buildStatus == 'SUCCESS') {
color = 'GREEN'
colorCode = '#00FF00'
} else {
color = 'RED'
colorCode = '#FF0000'
}
// Send notifications
slackSend (color: colorCode, message: summary)
hipchatSend (color: color, notify: true, message: summary)
emailext (
to: 'bitwiseman@bitwiseman.com',
subject: subject,
body: details,
recipientProviders: [[$class: 'DevelopersRecipientProvider']]
)
}
티스토리 뷰
참고자료
- Declarative Pipeline: Notifications and Shared Libraries : https://jenkins.io/blog/2017/02/15/declarative-notifications/
- Extending with Shared Libraries: https://jenkins.io/doc/book/pipeline/shared-libraries/
저장소를 만들자
공유 라이브러리를 저장할 저장소를 생성한다.
디렉토리 구성은 아래와 같이 한다. vars 밑에 넣어두면 된다.
(root)
+- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
+- vars
| +- foo.groovy # for global 'foo' variable
| +- foo.txt # help for 'foo' variable
+- resources # resource files (external libraries only)
| +- org
| +- foo
| +- bar.json # static helper data for org.foo.Bar
공통 라이브러리를 만들자
알람을 보내는 라이브러리를 만들건데 소스는 위 참고자료 활용한다.
위치는 위 스펙대로 vars/sendNotifications.groovy 로 한다.
vars/sendNotifications.groovy
젠킨스 설정을 해보자
Jenkins > Jenkins 관리 > 시스템 설정
Jenkinsfile 설정
Jenkinsfile (Declarative Pipeline)
#!groovy
@Library('bitwiseman-shared@blog/declarative/notifications') _
pipeline {
agent {
// Use docker container
docker {
image 'ruby:2.3'
}
}
options {
// Only keep the 10 most recent builds
buildDiscarder(logRotator(numToKeepStr:'10'))
}
stages {
stage ('Start') {
steps {
// send build started notifications
sendNotifications 'STARTED'
}
}
stage ('Install') {
steps {
// install required bundles
sh 'bundle install'
}
}
stage ('Build') {
steps {
// build
sh 'bundle exec rake build'
}
post {
success {
// Archive the built artifacts
archive includes: 'pkg/*.gem'
}
}
}
stage ('Test') {
steps {
// run tests with coverage
sh 'bundle exec rake spec'
}
post {
success {
// publish html
publishHTML target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: 'coverage',
reportFiles: 'index.html',
reportName: 'RCov Report'
]
}
}
}
}
post {
always {
sendNotifications currentBuild.result
}
}
}
'DevOps > Jenkins' 카테고리의 다른 글
How to replace Jenkins logo and title text (0) | 2019.07.03 |
---|---|
Jenkins: Couldn't find any revision to build. Verify the repository and branch configuration for this job (0) | 2019.04.04 |
How to view the metric data on Jenkins(Jenkins 에서 메트릭 데이터 보는 방법) (0) | 2018.12.26 |
Jenkins Pipeline - Declarative Pipeline 환경 변수 사용법 (0) | 2018.08.30 |
JVM 환경에서 LDAP 연동 후 빈번한 로그인 실패 발생시 대응 방법 (0) | 2018.08.14 |
Linux Jenkins 설치 (0) | 2018.02.07 |
젠킨스(Jenkins) LDAP 설정 방법 (0) | 2017.08.08 |
젠킨스(Jenkins) 테마(Theme) 적용 (0) | 2017.08.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 젠킨스
- 쓰레드덤프
- 데브옵스
- Ansible
- 파이프라인
- Jenkins
- Thread Dump
- PostgreSQL
- Linux
- iTerm2
- 플레이북
- openssl
- Docker
- vagrant
- 리눅스
- URL Encoding
- nginx
- Nexus
- Shell Script
- Password manager
- rundeck
- Playbook
- 엔서블
- ssl
- 엔시블
- JVM
- rsync
- Config History
- groovy
- DevOps
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함