添加钉钉机器人 {#%E6%B7%BB%E5%8A%A0%E9%92%89%E9%92%89%E6%9C%BA%E5%99%A8%E4%BA%BA}
在钉钉群设置里添加机器人拿出Webhook地址
Jenkins安装钉钉插件 {#jenkins%E5%AE%89%E8%A3%85%E9%92%89%E9%92%89%E6%8F%92%E4%BB%B6}
Dashboard > 系统管理 > 插件管理,搜索构建通知,直接搜索Ding Talk也行
安装DingTalk插件,重启Jenkins
来到Dashboard > 系统管理
滑到最底下,多了个钉钉(发送钉钉消息)
设置你的通知时机
日志里的"详细日志"是否勾选都可以,勾上会在详细日志里打印告警信息
添加机器人信息
修改Jenkinsfile脚本文件告警通知方式1 {#%E4%BF%AE%E6%94%B9jenkinsfile%E8%84%9A%E6%9C%AC%E6%96%87%E4%BB%B6%E5%91%8A%E8%AD%A6%E9%80%9A%E7%9F%A5%E6%96%B9%E5%BC%8F1}
和stages同级,添加post成功和失败都通知
post{
success{
dingtalk(
robot: 'Jenkins_Dingding',
type:'MARKDOWN',
title: "success: ${JOB_NAME}",
text: ["- 成功构建:${JOB_NAME}项目!\n- 版本:${version}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"],
)
}
failure{
dingtalk(
robot: 'Jenkins-Dingding',
type:'MARKDOWN',
title: "success: ${JOB_NAME}",
text: ["- 失败构建:${JOB_NAME}项目!\n- 版本:${version}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"],
)
}
}
告警通知方式2(推荐) {#%E5%91%8A%E8%AD%A6%E9%80%9A%E7%9F%A5%E6%96%B9%E5%BC%8F2%EF%BC%88%E6%8E%A8%E8%8D%90%EF%BC%89}
直接在pipeline任务设置中添加钉钉机器人,我这只设置了艾特我,多个可以用逗号隔开
此方式可以点击窗口直接跳转到构建页面
直接登录Jenkins控制台
直接查看更改记录
构建完成效果 {#%E6%9E%84%E5%BB%BA%E5%AE%8C%E6%88%90%E6%95%88%E6%9E%9C}
告警1 {#%E5%91%8A%E8%AD%A61}
告警2 {#%E5%91%8A%E8%AD%A62}
Jenkinsfile脚本文件完整内容 {#jenkinsfile%E8%84%9A%E6%9C%AC%E6%96%87%E4%BB%B6%E5%AE%8C%E6%95%B4%E5%86%85%E5%AE%B9}
//所有脚本命令放在pipeline中
pipeline{
//指定任务哪个集群节点执行
agent any
//声明全局变量,给后面使用
environment{
//Harbor地址
harbor_addr = '192.168.170.111:80'
//仓库名
harbor_warehouse = 'monster'
//用户名
harbor_user = 'admin'
//密码
harbor_pwd = 'Harbor12345'
}
stages{
stage('拉取Gitlab仓库代码'){
steps{
checkout scmGit(branches: [[name: '${version}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.170.111:8888/root/jenkins-cicd-mytest.git']])
}
}
stage('Maven构建项目'){
steps{
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage('SonarQube检查代码质量'){
steps{
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target -Dsonar.login=8b2d57757d51a640fa47d90cce47b2d480170093'
}
}
stage('制作自定义Docker镜像'){
steps{
sh '''mv target/*.jar docker
`docker build -t ${JOB_NAME}:$version docker/'''
}
}
stage('推送镜像到Harbor仓库'){
steps{
sh '''docker login -u ${harbor_user} -p ${harbor_pwd} ${harbor_addr}
docker tag ${JOB_NAME}:${version} ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}
docker push ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}'''
}
}
stage('通知目标服务器拉取镜像并启动'){
steps{
sshPublisher(publishers: [sshPublisherDesc(configName: '应用服务器-170.111', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harbor_addr $harbor_warehouse $JOB_NAME $version $host_port $container_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
post{
success{
dingtalk(
robot: 'Jenkins_Dingding',
type:'MARKDOWN',
title: "success: ${JOB_NAME}",
text: ["- 成功构建:${JOB_NAME}项目!\n- 版本:${version}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"],
)
}
failure{
dingtalk(
robot: 'Jenkins-Dingding',
type:'MARKDOWN',
title: "success: ${JOB_NAME}",
text: ["- 失败构建:${JOB_NAME}项目!\n- 版本:${version}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"],
)
}
}
}
`