加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

通过Jenkins的api自动化部署

(2017-10-27 15:08:14)

通过Jenkins的api自动化部署

前言:

       之前采用jenkinsgitlabansibleshell的技术体系搭建了一套自动部署平台,但是经过使用,发现jenkins的代码发布功能比较简陋,需要自己编写脚本,并且不灵活,再加上ansible的密码管理问题,要不就在脚本里加上密码明文,要不就得做服务器间的互信,这几方面使用体验都很差。

       最大都问题在于针对我们公司的超级多模块,同一程序部署点不同,配置文件也不同等多个问题,采用本文方法在jenkins的基础上进行二次开发。

 

目的:

       实现自动化部署,但是可以灵活配置部署点(可方便横向扩展),方便管理不同服务器上的同一配置文件。

       最终实现通过jenkins设置完项目后,无需再次登录jenkins平台即可一键部署。

 

应用技术:

       gitlab 代码管理

       Jenkins 代码集成 通过API供外部客户端使用

       Django web框架

       Python 编程语言 2.7版本

       Saltstack 代码发布等

       Mysql 配置信息存储

      

 

一、安装python-jenkins

pip install python-jenkins

这是python的第三方包,将jenkinsAPI编写成一个模块,使用起来非常方便,首推此模块,如果其他语言,可以通过http接口。

 

二、创建数据库表

根据自己需要的信息定义表结构

 

 

三、编写前端

http://s4/mw690/006IC8q4zy7flb38SHxb3&690

 

图片中的信息是项目信息,通过加载数据库获取的数据,右侧操作栏分别是‘查看’,‘发布’,‘设置参数’,‘回滚’

 或者通过调用jenkins的接口可直接获取到jenkins集成的所有项目:

server=jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)
list_job = server.get_all_jobs()
for list in list_job:
   
print list['name'] + ' , ' + list['color']

运行结果:(项目名,构建状态[red:失败,blue:成功])

EM , red

FirstGitJob , blue

fistJob , blue

javacode , blue

maven_web , blue

test1 , notbuilt


 通过‘设置参数’键进行数据库中的配置文件参数设置,结果如图:

http://s16/mw690/006IC8q4zy7flb5UKXt0f&690


config字段是要进行配置文件模版参数替换的数值

http://s4/mw690/006IC8q4zy7flb6S1uX93&690

测试的配置文件就是几个简单的数据,用{shujux}的方式设定不同的服务器上不同的参数,发布到各服务器后,此参数会改为数据库设置的参数。

 

四、后台编写

       4.1Jenkins自动构建

       Jenkins平台中项目设置完毕后,我们可以通过jenkinsapi进行任务自动构建

jenkins_server_url='http://192.168.168.119:8080/jenkins'
   
user_id='username'
   
api_token='passwd'
   
server=jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)
   
server.build_job('maven_web')

链接上jenkins后进行‘maven_web’任务的构造,然后就在jenkins服务器上产生了我们要的war包。

 

构建过程中,可以通过server.get_build_info('maven_web',num1)['building']来判断任务是否构建完成

并且可以通过server.get_job_info('maven_web')['lastBuild']['number']来获取构建完成时的构建的版本号,用于做版本控制(回滚操作)。

然后在通过server.get_build_info('maven_web',num1)['result']获取构建的结果(成功,失败)。


   4.2war发布

   然后通过saltstackcp.push模块获取到此war包,然后发布到各指定服务器上即可。

 

获取war包时,我们要清楚jenkins的工作原理,jenkins是通过tomcat_maven来进行程序打包,然后通过软链接的方式进行版本控制,如图

http://s7/mw690/006IC8q4zy7flb9YleKf6&690


http://s2/mw690/006IC8q4zy7flb92MJra1&690

这样,每次创建成功后,都会将目录指向新的版本号目录,失败时指向-1目录,所以我们只需要通过链接路径就可以一直获取到最新的war包。

 

至于cp.push获取jenkins服务器上的war包,和将war包发布至各服务器,可以看之间的博文,都有介绍如何发布,如果不是采用python语言,可以看javaspringMVCsaltstack那篇博文,技术都有介绍。

4.3、配置文件

配置文件也是同war一样发布至各服务器,但是发布过去的都是模版,

模版上的变量需要替换为指定内容。

list1='test1!|test2!|test3'
index = 1
cmd = ''
for i in list1.split('!|'):   
   
cmd = 'sed -i s/{shuju' + str(index) + '}/' + i + '/ /root/jenkinsTest/test.config ;' + cmd
    index=index+
1

通过加载数据库build_config表里的信息获取到不同服务器的配置文件参数,然后拼接cmd执行,再在各服务器分别执行自己的cmd指令即可将配置文件中的变量信息替换为指定的内容了。

五、设置jenkins

http://s7/mw690/006IC8q4zy7flbda0Rwd6&690


maven_web就是本次发布测试用的代码。设置没有什么特殊的地方,但是不需要大家去写脚本和设置构建结束时执行脚本进行发布等工作了。

当然也可以通过jenkinsapi进行任务构建,就不需要登录jenkins平台了。但是jenkins本身的构建功能比较完善,也就没必要再自己写了。

              

六、测试

               点击图中的‘发布’键

http://s11/mw690/006IC8q4zy7flbe10o20a&690

http://s2/mw690/006IC8q4zy7flbhN0dz31&690

如图可见,war包及配置文件均以发布至各服务器,并且配置文件信息分别是数据库配置的信息

 

在部署位置可以放置启动、停止脚本等,可以由master服务器集中进行启停控制。

 

每次替换新war包时,保留旧的war包,制定上线标准和部署标准,即可轻松实现回滚。

 

 

总结:

l   jenkins进行项目设置(不需要jenkins对项目进行发布等,只需要他从gitlab上拉代码,然后打包即可,此过程由jenkinsapi实现,无需登录jenkins平台构建)

l   通过运维平台进行配置文件参数设置,(针对不同服务器配置文件参数不同情况使用,如果不同服务器使用的是同样的配置文件,那么跳过此步)

l   点击发布,war包和配置文件发布至各服务器,并且配置文件信息替换为指定内容。

l   执行各服务器上的启动脚本,或由master服务器集中控制各服务器程序运行。

l   上线完毕

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有