jenkins pipeline 之 deploy k8s 环境并发送邮件通知
项目中有更新代码之后触发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 环境并发送邮件通知的更多相关文章
- Jenkins指定tag发布到k8s环境
Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...
- Kubernetes笔记(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货分享!)
通过前面两篇文章,我们已经有了一个"嗷嗷待哺"的K8s集群环境,也对相关的概念与组件有了一个基本了解(前期对概念有个印象即可,因为只有实践了才能对其有深入理解,所谓"纸上 ...
- jenkins pipeline构建后发送邮件通知
jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...
- 基于Jenkins Pipeline的ASP.NET Core持续集成实践
最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...
- Docker的Jenkins Pipeline工作流
原文地址:http://www.youruncloud.com/blog/127.html 分享主题 一个软件产品的开发周期中,尤其是敏捷开发,持续集成和持续部署是必不可少的环节,而随着产品的丰富,模 ...
- Jenkins Pipeline 参数详解
Pipeline 是什么 Jenkins Pipeline 实际上是基于 Groovy 实现的 CI/CD 领域特定语言(DSL),主要分为两类,一类叫做 Declarative Pipeline,一 ...
- 自动化集成:Pipeline整合Docker+K8S
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述流水线集成K8S用法. 一.背景描述 分布式服务的部署 ...
- Kubernetes DevOps: Jenkins Pipeline (流水线)
要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式.Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于 ...
- Jenkins pipeline:pipeline 使用之语法详解
一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中 ...
随机推荐
- Cheat Engine 入门操作
Cheat Engine(简称CE,中文名-作弊引擎),用于查找.修改内存数据,是游戏逆向的基础工具. 本文仅介绍基础操作. 1.打开进程 运行游戏程序,并将CE附加到进程 2.寻找数据地址,并修改数 ...
- Linux每日练习-crontab
- 将已有微信小程序转换为多端应用
文档地址 https://nervjs.github.io/taro/
- P 1030 完美数列
转跳点:
- 2016蓝桥杯决赛C/C++A组第四题 路径之谜
题意: 小明冒充X星球的骑士,进入了一个奇怪的城堡.城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角.可以横 ...
- SpringBoot 系列教程之事务不生效的几种 case
SpringBoot 系列教程之事务不生效的几种 case 前面几篇博文介绍了声明式事务@Transactional的使用姿势,只知道正确的使用姿势可能还不够,还得知道什么场景下不生效,避免采坑.本文 ...
- foreach —(遍历数组或循环中的字符,以获取信息)
namespace ConsoleApplication2{ class Program {//letter 字母 gigit 数字 symbol 符号 static void Main(string ...
- 2020PHP面试-SQL篇
一.乐观锁和悲观锁 1.悲观锁是指假设并发更新会发生冲突,不管冲突是否会发生,都会使用锁机制. 优点: 完全保证数据安全. 缺点:锁机制会有额外开销,并发度降低. 可能会产生死锁. 2. 乐观锁是指假 ...
- Day 8:方法上自定义泛型、类上、接口上、泛型的上下限
泛型 泛型是jdk1.5使用的新特性 泛型的好处: 1. 将运行时的异常提前至了编译时 2. 避免了无谓的强制类型转换 泛型在集合中的常见应用: ArrayList<Strin ...
- jobs|ps|杀死nohup
方法1:如果没有退出客户端界面,可以先通过 “jobs” 命令查看程序是否在运行,此时只有序号没有PID号:输入命令 “jobs -l” 会显示程序的PID号,然后通过 “kill -9 PID”杀死 ...