通过Shell+atd定时任务,实现jenkins指定时间自动发布任务

我们公司是通过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 [email protected] -t [email protected] -t [email protected] -s smtp.haohushi.me -u "Build INFO" -o message-content-type=html -o message-charset=utf8 -xu [email protected] -xp quhu.hill.4 -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 admin:quhuhaohushi -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

时间: 2024-10-05 05:36:48

通过Shell+atd定时任务,实现jenkins指定时间自动发布任务的相关文章

可设置指定时间自动消失的 MessageBox

本文主要是讲如何实现可设置指定时间自动消失的 MessageBox提示框 在开发客户端应用程序的时候,经常用得WinForm中MessageBox提示框.但是有时候还是满足不了一些用户要求,客户要求千奇百怪,例如客户需要做某些提示的时候,不去点击确定或取消的时候,等待一段时间自动消失,为此我们可以使用下面类来实现,采用 Thread.Sleep来关掉当前提示框,具体代码如下: using System; using System.Collections.Generic; using System

Jenkins 搭建U3D自动发布 IOS

http://www.cnblogs.com/yinghuochong/archive/2013/09/01/3294940.html 1.安装包,工具略过. 2.插件管理 Subversion Plug-in This plugin adds the Subversion support (via SVNKit) to Jenkins. Testflight Plugin This plugin will upload .ipa or .apk file(s) to testflightapp

Jenkins 搭建U3D自动发布 Android

工具 [u3d相关的PostProcessBuildPlayer,PerformBuild.cs] 1.Jenkins 开源包  Java -jar jenkins.war,参考链接 http://www.cnblogs.com/itech/archive/2011/11/02/2233343.html. 2.JDK 3.ANT 4.Eclipse 5.Jenkins 插件管理 Ant Plugin This plugin adds Apache Ant support to Jenkins.

持续集成 Jenkins +Gitlab + SSH 自动发布 HTML 代码

一.整体流程 二.Jenkins 配置 2.1.首先安装插件 Gitlab Hook Plugin GitLab Plugin Publish Over SSH 2.2.配置目标服务器 系统管理 ---> 系统设置 ---> Publish over SSH 如果不想使用密钥认证登陆,也可以使用 账户密码登陆. 2.3.创建 job 我们创建一个自由风格的 job,配置好 git 源,这里也可以配置无密钥登陆,我这里使用账户密码. 创建触发器,用于自动构建,我们需要把其中的 url 添加到我们

MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)

MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据) 分类: MySql5.x2014-06-23 15:16 1266人阅读 评论(0) 收藏 举报 mysql数据库 [sql] view plaincopy <span style="font-family: 'Microsoft YaHei'; font-size: 14px;">MySQL定时任务event</span> 由于一些业务需求,我们可能需要定时清除数据库一些废弃的数据

CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动

CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.特点: Mysql是开源的,所以你不需要支付额外的费用.Mysql支持大型的数据库.可以处理拥有上千

shell脚本汇总 2 删除创建时间超过32天的文件

shell脚本汇总 2 删除创建时间超过32天的文件 #!/bin/bash #date:2017-04-11 #version:clear_ballcloud_back_v1.0 #contents: removing the  /www/web/ballcloud_bakck/* , if the file is created above 32 day # cd /www/web #sum the size of already delete directory dirsize=`du -

Sql server 查询指定时间区间工作日数、休息日数等日期操作

1.查询指定时间区间的工作日 这个主要难点是法定节假日,国家的法定节假日每年都不一样,还涉及到调休,所以我们设计一个假日表.主要字段有年份,类型(是否调休),假期日期.如下: CREATE TABLE [dbo].[Holidays]( [ID] [int] IDENTITY(1,1) NOT NULL, [Holiday] [datetime2](7) NULL,--假期日期 [YearS] [char](4) NULL,--年份 [daytype] [int] NULL--类型 ) 添加好当

在指定时间干,必须干(kbmmw 中的事件调度)

从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件,调度事件的主要目标就是”在指定时间干,必须干“,不是“爱干”,是“必须干” :). 在传统的delphi 中事件调度室通过两种方式,一种方式通过Ttimer 来实现,(我20年做的母校的食堂餐饮消费系统就是通过Ttimer来轮询 POS 机的).另外一种就是通过扩展Tthread 线程类,通过后台完