扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Jenkins作为一款持续集成,持续部署的软件,是由java编写的一款开源软件
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了凌海免费建站欢迎大家使用!
• 作为一款非常流行的CI(持续集成)工作,用于构建和测试各种项目
• Jenkins 的主要功能是监视重复工作的执行,例如软件工程的构建或在 cron下设置的 jobs
DEV ---> GIT ---->CI(持续集成) ----->CD(持续部署)
使用过程:
Dev客户端
1.搭建好git服务器,并使用git add . +git commit -m ‘project’ 上传至本地文件
2.Git tag v 1.0 ----打标签 git push,git push --tag推上去
Git端
3.登录到github服务器,新建项目与群组,并将客户端的git仓库使用http推到项目中
Jenkins服务端
4.在jenkins服务器上,建立自己的工程,其中添加git-parameter,并输入gitlab相关url使其能够与gitlab的项目通信,
5.可以在主菜单后会可以在build with parameter中看到各种上传到gitlab上的版本,通过开始构建,将gitlab上的项目下载到jenkens上,搭建web,将文件打包放在web上方便分发
6.编写脚本,实现Jenkins中文件的自动部署,版本更新
本篇主要对步骤5,6进行自动管理:
步骤5:将Jenkins上的文件一键部署至http共享
Jenkins的http自动分发:在工程设置中,添加构建步骤
newcodes_${freetag}:路径是/var/lib/jenkins/workspace/freesttle
#将版本文件从newcodes_${freetag}放到deploy_dir下
------------------------------------------------------------------------
shell代码
deploy_dir= /var/www/html/deploy/packages/
cp -r newcodes_${freetag} $deploy_dir
rm -rf $deploy_dir/newcodes_${freetag}/.git #删除拷贝后原版本文件中的.git文件
cd $deploy_dir
在新的路径下打包拷贝过来的版本文件
tar czf newcodes_${freetag}.tar.gz newcodes_${freetag}
rm -rf newcodes_${freetag} #删除拷贝过来的源文件,只留tar包
md5sum newcodes_${freetag}.tar.gz | awk '{print $1}' > newcodes_${freetag}.tar.gz.md5
#用md5计算出tar包校验值,存放在对应文件下
-------------------------------------------------------------------------------
新建立一个 mp_live_version 版本更新功能
#新版本(live_version),上一个版本(lastest_version)
#[ -e存在这个路径] &&则将live_version内容写入lastest_version
#将新的输入内容写如新版本
[ -e /var/www/html/deploy/live_version ] && cat /var/www/html/deploy/live_version > /var/www/html/deploy/last_version
echo ${mp_live_ver} > /var/www/html/deploy/live_version
步骤6:从jenkins上下载最新的版本文件并自动完成部署(web网页部署)
#服务器/var/www/html下提供live_version(最新版本),lastest_version(上一版本)版本文件。提供packages/XXX_1.tar.gz文件
importrequests
fromurllibimportrequest
importhashlib
importos
importtarfile
defget_data(url):#负责将远端的文件打开text的格式
r = requests.get(url) #下载当地地址
returnr.text #返回文本格式
defdownload(url,fname):#下载文件,前面的download脚本
html = request.urlopen(url)#下载最新的tar包
withopen(fname,'wb')asfobj:
while True:
data = html.read(1024)
if notdata:
break
fobj.write(data)
defcheck_md5(fname): #校验md5数值,求fname文件的md5数值
m = hashlib.md5()
withopen(fname,'rb')asfobj:#打开文件逐步读取
while True:
data = fobj.read(1024)
if notdata:
break
m.update(data) #将每次的md5数值更新
returnm.hexdigest() #将md5数值转化成可读的形式
defdeploy(app): #部署,先切到目录,解压tar,创建快捷方式
os.chdir('/var/www/packages')#cd到这个路径下
tar = tarfile.open(app,'r:gz')#对app路径的文件进行解包
tar.extractall()
tar.close()
src = app.replace('.tar.gz','') #将.tar.gz替换为''取/var/www/html/packages
dst ='/var/www/html/mysite'#创建快捷方式的路径
ifos.path.exists(dst): #创建的路径是否已经存在,若存在则删除路径后,再次创建
os.unlink(dst)
os.symlink(src,dst) #创建快捷方式
if__name__ =='__main__':
ver = get_data('http://192.168.122.59/deploy/live_version')#版本信息在/var/www/html/下
app_name ='myproject_%s.tar.gz'%ver #压缩包的文件名
app_url = 'http://192.168.122.59/packages/'+ app_name #压缩包的网络文件路径
app_path = os.path.join('/var/www/packages',app_name)#完整的下载到本机路径
download(app_url,app_path)#下载到本的
locals_md5 = check_md5(app_path)
remote_md5 = get_data(app_url+'.md5').strip()#下载远程的md5文件,并将内容后面的/n去掉
iflocals_md5 == remote_md5:
deploy(app_path) #若md5校验没有问题,则解压这个版本的文件,并创建快捷方式
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流