设为首页 收藏本站
查看: 1299|回复: 0

[经验分享] 通过Shell+atd定时任务,实现jenkins指定时间自动发布任务

[复制链接]

尚未签到

发表于 2018-9-4 09:10:11 | 显示全部楼层 |阅读模式
  我们公司是通过Git+Jenkins+Shell+Docker实现自动化更新发布。
  这里我说下我是如何用Shell+atd服务,在晚上21:00自动完成领导交代的某个项目上线操作。要注意的是,这个上线项目和上线时间是不固定的!注意:这个跟jenkins的定时任务不同,jenkins定时任务是循环任务,这个是一次性的,需要人工设定好。
  CTO规定每天21:00后才可以网站发布,下班时,开发告知我API项目晚上9点要上线。TM的回去打LOL或有事情容易搞忘了(CTO说:我希望这种事情以后不要发生!!),咋办呢?
  于是,我就写了个Shell,at 21:00 /auto_build.sh (脚本路径/脚本名)自动完成上线任务。
  Shell脚本运行原理:通过curl访问网页,用命令对判断构建的信息,成功与失败都往手机与邮箱发送构建提醒,中途失败则不执行下一步。
  我们的jenkins发布需要构建2个任务完成:第一步打包;第二步发布,即运行脚本会依次执行好几个任务。废话不多说了,放上脚本。
  #!/bin/bash
  #——————————————————————— 以下内容使用前需要手工修改 ——————————————————————
  #开发测试 jenkins 链接
  jenkins_path="http://IP:端口/job"
  #新版本接口 jenkins 链接
  #jenkins_path="http://IP/view/All/job"
  #需要构建的项目名称
  #buildJob="it_test"   #测试项目
  #buildJob="tmp_accompany-server"
  #buildJob="tmp-accompany-server_1-Deploy"
  #buildJob="tmp-accompany-server_2-Deploy"
  #构建任务列表,按顺序执行构建
  #arr=("tmp_accompany-server" "tmp-accompany-server_1-Deploy" "tmp-accompany-server_2-Deploy")
  arr=("it_test" "it_test")
  #——————————————————————— 以上内容使用前需要手工修改 ——————————————————————
  #—————————————————————————— 定义发邮件函数 —————————————————————————————————
  Email(){
  /sendEmail/sendEmail -f 发件人邮箱 -t 收件人邮箱 -s 发送服务器 -u "Build INFO" -o message-content-type=html -o message- -xu 邮箱名 -xp 密码 -m $1
  }
  #—————————————————————————— 定义jenkins构建函数 —————————————————————————————
  build(){
  #判断是否传入了参数。
  if [ -z $1 ];then
  echo "ERROR,未传入构建链接!"
  exit 1
  fi
  #把这个项目的页面信息存到build.tmp文件中
  curl -s -o build.tmp ${1}
  #对页面信息进行提取最后构建数
  lastbuild=$(grep -oE "Last build \(\#[0-9]*" build.tmp |grep -oE [0-9]*)
  #接下来要构建的数
  newbuild=$[lastbuild+1]
  #触发构建
  curl -u 用户名:密码 -s -d build -d delay=0sec ${1}build?delay=0sec
  echo "buliding ${buildJob} #${newbuild} url:${1}"
  echo -n "building..."
  sleep 5
  #访问最新构建结果信息放到build.tmp2文件中
  #http://ip:port/job/test/buildHistory/ajax --header n:${num} num存放想查看具体某次的构建结果信息
  #下面为查看最新构建(刚刚触发的构建)的结果。
  curl -o build.tmp2 -s --header n:${newbuild} ${1}buildHistory/ajax
  #判断结果文件中是否包含 In progress(排队中)|pending(构建中),是的话每三秒去重新获取结果进行判断
  while grep -qE "In progress|pending" build.tmp2;
  do
  echo -n "."
  sleep 3
  curl -o build.tmp2 -s --header n:${newbuild} ${1}buildHistory/ajax
  done
  echo
  #包含Success单词为构建成功
  if grep -qE "Success" build.tmp2 ;then
  echo "Build Success"
  Email "Build Success! ${BuildJob}"
  #包含Unstable单词为构建有警告但是构建成功
  elif grep -qE "Unstable" build.tmp2 ;then
  echo "Build Success, but is a Unstable build"
  Email "Build Success, but is a Unstable build"
  exit 1
  #包含Failed或者Aborted单词为构建失败
  elif grep -qE "Failed|Aborted" build.tmp2 ;then
  echo "Build Fail"
  echo "#Open Link: ${1}${newbuild}/console see details"
  rm -rf build.tmp*
  Email "Build Fail! $buildJob"
  exit 1
  fi
  #执行过程中产生的文件删除
  rm -rf build.tmp*
  #后面可以写相应的脚本进行获取war包部署到环境中
  }
  #——————————————————————————jenkins构建函数结尾——————————————————————————————
  #——————————————————————————开始执行构建任务—————————————————————————————————
  for buildJob in ${arr[@]};
  do
  #job的URL路径
  jobPage=${jenkins_path}/${buildJob}/
  echo $jobPage
  build $jobPage
  done


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-562269-1-1.html 上篇帖子: jenkins实战之jenkins安装部署(一) 下篇帖子: jenkins updatecenter更新插件有问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表