千家信息网

Jenkins中的一键部署与版本更新

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,Jenkins作为一款持续集成,持续部署的软件,是由java编写的一款开源软件• 作为一款非常流行的CI(持续集成)工作,用于构建和测试各种项目• Jenkins 的主要功能是监视重复工作的执行,例如
千家信息网最后更新 2025年02月02日Jenkins中的一键部署与版本更新

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文件

import requests
from urllib import request
import hashlib
import os
import tarfile


def get_data(url): #负责将远端的文件打开text的格式
r = requests.get(url) #下载当地地址
return r.text #返回文本格式


def download(url,fname): #下载文件,前面的download脚本
html = request.urlopen(url) #下载最新的tar
with open(fname, 'wb') as fobj:
while True:
data = html.read(
1024)
if not data:
break
fobj.write(data)


def check_md5(fname): #校验md5数值,求fname文件的md5数值
m = hashlib.md5()
with open(fname, 'rb') as fobj:#打开文件逐步读取
while True:
data = fobj.read(
1024)
if not data:
break
m.update(data) #将每次的md5数值更新
return m.hexdigest() #md5数值转化成可读的形式


def deploy(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' #创建快捷方式的路径
if os.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去掉
if locals_md5 == remote_md5:
deploy(app_path)
#md5校验没有问题,则解压这个版本的文件,并创建快捷方式



文件 版本 路径 项目 服务 数值 方式 服务器 步骤 更新 内容 工程 拷贝 软件 功能 客户 格式 端的 脚本 并将 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 息壤服务器的管理地址 仿真软件开发工程师 数据库监听没有启动可以创建表吗 郴州市网络安全应急指挥中心 网络安全公益短片 加强网络安全管理的简报 徐汇区网络技术近期价格 路由器搭建ftp服务器 点歌服务器怎么用 软件开发qc成果 花生壳 链接服务器失败 tag数据库 嵌入式网页服务器中能添加图片吗 有关网络安全的教育总结报告 阿里云数据库如何下载 数据库系统的三级模式存在的映射 民营高科技互联网企业排名 网络安全身份鉴别方式 机关单位网络安全会议 外网网络代理服务器 常熟推广软件开发专业服务 湘潭大学网络安全专业研究生招生 软件开发的核心技术是什么 结构化程序可以用于软件开发吗 成年人白细胞含量数据库 数据库 什么是同义词 软件开发如何推广运营 软件开发培训去哪里审批 移动端开发用什么软件开发 软考数据库中级刷题
0