项目中有更新代码之后触发jenkins任务,部署好之后并发送邮件给发开人员

#!/usr/bin/env groovy
Date date = new Date()
def time = date.format("yyyyMMdd")
def project_name = "test1"
def mail_list = "test@163.com" def cmd_pods = "kubectl get pods -n test"
def depoly_ip = "192.168.9.181"
def access_port = ""
def pod_status(cmd,type){ script{ if(type == "clean"){
sum = while(true){
sleep
sum +=
echo "${cmd}| grep test| wc -l"
out = sh(script: "${cmd}| grep test| wc -l", returnStdout: true)
echo "${out}"
echo "${cmd}| grep test | wc -l"
if(out.toInteger() == ){
echo "clean test env"
break
}
if(sum == ){
error "not clean env pods"
break
}
} }
if(type == "deploy"){
sum = while(true){
sleep
sum +=
out = sh(script: "${cmd}| grep Running| wc -l ", returnStdout: true)
out1 = sh(script: "${cmd}| grep Completed| wc -l ", returnStdout: true)
if(out1.toInteger() == ) {
if(out.toInteger() >= ) {
echo "depoly success "
break
}
}
if(sum == ){
error "pods not Running"
break
}
} }
} }
pipeline {
agent { label '192.168.9.181' }
//agent any
environment {
def changeBranch = "change-${GERRIT_CHANGE_NUMBER}-${GERRIT_PATCHSET_NUMBER}"
}
stages {
stage("download code"){
steps{
git branch: "oi" ,url: 'git@test.com:test/test-helm.git'
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
commit_id = sh(returnStdout: true, script: 'git show --pretty=%H| head -1').trim()
mail_name = sh(returnStdout: true, script: 'git show --pretty=%ae| head -1').trim()
change_id = sh(returnStdout: true, script: 'git show --pretty=%b| head -1').trim()
update_info = sh(returnStdout: true, script: 'git show --pretty=%s| head -1').trim() }
}
}
stage("clean env"){
steps{
dir("/root/appaiops/"){
script {
sh(returnStatus: true, script: "./clean-test.sh")
pod_status(cmd_pods,"clean")
}
}
sh "sudo rm -rf /root/appaiops"
}
}
stage ('deploy env') {
steps {
echo "start deploy env"
sh "./build.sh "
dir("/root/appaiops/"){
sh "./run-test.sh ${depoly_ip}"
}
}
}
stage('check pods status') {
steps {
script{
pod_status(cmd_pods,"deploy")
sh "${cmd_pods}"
}
}
}
}
post {
always {
script {
email_format = """
<table border="">
<tr>
<td>Project</td>
<td>${project_name}</td>
</tr>
<tr>
<td>commit_id:</td>
<td>${commit_id}</td>
</tr> <tr>
<td>Author:</td>
<td>${mail_name}</td>
</tr>
<tr>
<td>access address </td>
<td>http://${depoly_ip}:${access_port}</td>
</tr>
<tr>
<td>pods depoly status</td>
<td>Successful</td>
</tr>
</table>
"""
}
}
success {
emailext (
subject: " Deploy Successful ${env.JOB_NAME} [${update_info}]",
body: """
<p>Deploy test/${project_name} env Successful </p>
<p>${BUILD_URL}: SUCCESS </p>
${email_format}""",
to: "${mail_list},${mail_name}",
from: "test1@163.com",)
}
failure {
step([$class: 'Mailer',
notifyEveryUnstableBuild: true, recipients: "${mail_list}",
sendToIndividuals: true]);
}
}
}

jenkins pipeline 之 deploy k8s 环境并发送邮件通知的更多相关文章

  1. Jenkins指定tag发布到k8s环境

    Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...

  2. Kubernetes笔记(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货分享!)

    通过前面两篇文章,我们已经有了一个"嗷嗷待哺"的K8s集群环境,也对相关的概念与组件有了一个基本了解(前期对概念有个印象即可,因为只有实践了才能对其有深入理解,所谓"纸上 ...

  3. jenkins pipeline构建后发送邮件通知

    jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...

  4. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...

  5. Docker的Jenkins Pipeline工作流

    原文地址:http://www.youruncloud.com/blog/127.html 分享主题 一个软件产品的开发周期中,尤其是敏捷开发,持续集成和持续部署是必不可少的环节,而随着产品的丰富,模 ...

  6. Jenkins Pipeline 参数详解

    Pipeline 是什么 Jenkins Pipeline 实际上是基于 Groovy 实现的 CI/CD 领域特定语言(DSL),主要分为两类,一类叫做 Declarative Pipeline,一 ...

  7. 自动化集成:Pipeline整合Docker+K8S

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述流水线集成K8S用法. 一.背景描述 分布式服务的部署 ...

  8. Kubernetes DevOps: Jenkins Pipeline (流水线)

    要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式.Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于 ...

  9. Jenkins pipeline:pipeline 使用之语法详解

    一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中 ...

随机推荐

  1. 51nod 1103:N的倍数 抽屉原理

    1103 N的倍数 题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得这 ...

  2. jquery播放mp3

    $("button").on("click",function(){    $('embed').remove();            $('body'). ...

  3. s5pc100开发板linux内核移植

    相关软件下载地址:http://pan.baidu.com/s/16yo8Y 应用于FSC100开发板 交叉编译工具:arm-cortex_a8-linux-gnueabi-gcc linux-2.6 ...

  4. 微信小程序手绘地图实现之《Canvas》

    环境:微信SDK2.9+   + uniapp (可切换直接使用.map.js不限制环境) 正题: 先创建一个地图组件 <template> <view class="cu ...

  5. 苹果maccms网站漏洞进行修复解决方法教程

    上期发现视频名称中包含木马文件 然后教大家使用标签进行过滤 {$vo.vod_name|mac_filter_html} 可是最近发现现在黑客行为是全字段挂马,修改数据字段格式挂马,多重嵌套挂马. 真 ...

  6. Java enum应用小结

    用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...

  7. web.xml中filter加载顺序出现的问题

    刚刚遇到了一个问题,项目中需要用到characterEncodingFilter和HiddenHttpMethodFilter,但是post请求还是会中文乱码,找了半天原因,后来发现,filter加载 ...

  8. 卷积神经网络应用于tensorflow手写数字识别(第三版)

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_dat ...

  9. tensorflow应用于手写数字识别(第二版)

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data#载入数据集 mnist = inp ...

  10. Maven - 工作原理

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Maven – 构建生命周期.阶段 ...