通过Shell+atd定时任务,实现jenkins指定时间自动发布任务
2016-09-09 16:18
676 查看
我们公司是通过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-charset=utf8 -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
#包含<span style="font-family: Arial, Helvetica, sans-serif;">Failed或者</span><span style="font-family: Arial, Helvetica, sans-serif;">Aborted单词为构建失败</span>
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
这里我说下我是如何用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-charset=utf8 -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
#包含<span style="font-family: Arial, Helvetica, sans-serif;">Failed或者</span><span style="font-family: Arial, Helvetica, sans-serif;">Aborted单词为构建失败</span>
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
相关文章推荐
- 通过crond定时任务自动更新动态IP到PubYun(3322)实现远程访问
- Jira+Jenkins集成,实现任务状态改变自动触发发布
- 通过inf文件让Win XP实现自动维护 [可实现系统定时任务]
- 服务器文件自动打包备份到电脑,可以通过flashfxp及电脑的计划任务实现
- SQL Server 2005使用作业实现定时备份任务和删除指定天数前的备份文件
- jenkins 自动从svn获取源码通过maven打包后发布到远端tomcat
- 学生社团管理系统 任务:通过此系统可以实现如下功能(包含但不限于以下功能,可自行设计): 1、社团信息包括:社团编号、社团名称、成立时间…… 2、学生信息包括:学号、姓名、性别、年级、专业…… 3
- linux系统间通过cron和ssh实现数据的自动定时传输
- 通过计划任务实现windows8系统启动自动显示桌面
- s实现指定时间自动跳转到某个页面
- 通过Quartz实现定时任务
- 通过预先设定的系统时间来自动取走自动生成的文件到指定的目录下!!!
- php如何实现定时任务 php定时任务方法 最佳解决方案 php自动任务处理
- 在docker中运行jenkins实现代码自动发布到测试服务器
- Windows 自动定时执行任务的几种实现方法
- Jenkins~通过WebDeploy实现自动部署
- SpringMVC通过注解实现定时任务
- 通过Git WebHooks+脚本实现自动更新发布代码之shell脚本
- 实现文章指定时间发布功能【php + linux】
- Jenkins+Maven+Svn实现代码自动打包与发布