软件版本管理
可以在git中使用tag标记将某一次commit提交标识为某一版本
[root@develop ~]# cd myproject/ # 进入项目目录
[root@develop myproject]# git tag # 查看标记,默认没有标记
[root@develop myproject]# git tag 1.0 # 将当前提交,标识为1.0
[root@develop myproject]# git tag
1.0
[root@develop myproject]# echo 'hello world' > index.html
[root@develop myproject]# git add .
[root@develop myproject]# git commit -m "add index.html"
[root@develop myproject]# git tag 1.1
# 将本地文件和tag推送到gitlab服务器
[root@develop myproject]# git push # 只推送文件,不推送标记
[root@develop myproject]# git push --tags
在gitlab上查看标记 标签就可以看的到
配置jenkins访问gitlab代码仓库
鼠标点点点
- 新建一个任务
- 输入任务名称 点一下下面那个 然后确定 不然点不了确认
- 参数化构建
- 名称为自己定义的变量名 用于标识tag或分支 参数类型选择分支或标签 默认值写人家提示的
- 指定分支为$名称 然后点击保存
- 在项目里面 进行构建测试
- 下载到子目录
- 配置 构建触发器 选择输出到子目录英文为“checkout to a sub directory”
- 仓库的本地子目录 XXX$名称
- 保存开始构建
- 查看Jenkins上的目录
- ls /var/lib/jenkins/workspace/myproject/
Jenkins上安装、配置httpd共享服务器
[root@jenkins ~]# yum -y install httpd # 安装apache的软件包
[root@jenkins ~]# mkdir -p /var/www/html/deploy/packages # 创建jenkins从gitlab上下载的打包代码存放的目录
[root@jenkins ~]# chown -R jenkins:jenkins /var/www/html/deploy/ # 修改权限,因为是jenkins自动下载的,需要修改存放的权限
[root@jenkins workspace]# ls -l /var/www/html/deploy/
drwxr-xr-x 2 jenkins jenkins 6 11月 29 06:55 packages
[root@jenkins ~]# systemctl start httpd
[root@jenkins ~]# systemctl enable httpd
配置Jenkins把gitlab下载的代码打包
在jenkins上修改myproject
构建 选择执行shell
pkg_dir=/var/www/html/deploy/packages
cp -r myproject-$web $pkg_dir
rm -rf $pkg_dir/myproject-$web/.git
cd $pkg_dir
tar -zcf myproject-$web.tar.gz myproject-$web
rm -rf myproject-$web
md5sum myproject-$web.tar.gz | awk '{print $1}' > myproject-$web.tar.gz.md5
cd ..
echo -n $web > ver.txt
以上步骤改好后 保存
测试 开始构建然后去jenkins的目录下去查看
网页也可以查看了在iP/deploy/packages
web1服务自动部署
安装httpd服务
[root@web1 ~]# yum install -y httpd tar python38*
[root@web1 ~]# mkdir /var/www/download # 存储jenkins主机上下载的应用代码
[root@web1 ~]# mkdir /var/www/deploy # 部署应用代码
[root@web1 ~]# ss -tlnp | grep :80
编写自动上线脚本
#1下载软件包
#2.检查软件包是否损坏
#3.解压部署到web服务器
#更新版本号文件
import os,requests,hashlib,tarfile
#1.下载软件包
def has_new_ver(web1_ver_path, ver_url):
# web1_ver_path 为应用服务器web1主机的当前版本文件路径
# 如果文件不存在,返回True, 提示没有新版本
if not os.path.exists(web1_ver_path):
return True
# 当web1_ver_path存在时,先获取当前应用的版本号
with open(web1_ver_path, mode="r") as fr:
local_ver = fr.read()
# 通过requests获取jenkins服务器上的最新版本号
r = requests.get(ver_url)
# 当web1上的版本号和Jenkins服务器上的版本号不相等时,返回True, 即有新的版本
if local_ver != r.text:
return True
return False
#1.下载软件包
ver_url = "http://192.168.88.30/deploy/ver.txt"
web1_ver_path = "/var/www/deploy/ver.txt"
if has_new_ver(web1_ver_path,ver_url) == False:
print("没有新版本")
exit()
#2.md5值校验,检查软件包是否损坏
def file_ok(web1_tar_path,jenkins_tar_md5_url):
m = hashlib.md5()
with open(web1_tar_path,mode="rb") as fr:
while True:
data = fr.read(8192)#每次读文件的大小
if len(data) == 0:
break
m.update(data)#分批计算
resp = requests.get(jenkins_tar_md5_url)
if resp.text.strip()== m.hexdigest():
return True
return False
#2.检查文件是否损坏
r = requests.get(ver_url)
web1_tar_path =f"/var/www/download/myproject-{r.text}.tar.gz"
web1_deploy_dir= "/var/www/deploy"
jenkins_tar_url = f"http://192.168.88.30/deploy/packages/myproject-{r.text}.tar.gz"
jenkins_tar_md5_url = jenkins_tar_url + ".md5"
with open(web1_tar_path,mode="wb") as fw:
resp = requests.get(jenkins_tar_url)
fw.write(resp.content)
if file_ok(web1_tar_path,jenkins_tar_md5_url) == False:
print("文件以损坏")
os.remove(web1_tar_path)
exit()
#3.解压部署到web服务器上
def depoly(web1_tar_path,web1_deploy_dir,current):
tar = tarfile.open(web1_tar_path,mode="r")
tar.extractall(path=web1_deploy_dir)
tar.close()
path = web1_tar_path[:-7].split("/")[-1]
path=os.path.join(web1_deploy_dir,path)
#软链接存在就删除
if os.path.exists(current):
os.remove(current)
os.symlink(path,current)
#3.解压部署到web服务器上
current = "/var/www/html/current" #软链接
depoly(web1_tar_path,web1_deploy_dir,current)
#更新版本号文件
if os.path.exists(web1_ver_path):
os.remove(web1_ver_path)
with open(web1_ver_path,mode="w") as fw:
fw.write(requests.get(ver_url).text
完整测试流程
程序员编写新版本并推送到服务器
Jenkins上构建新版本
web服务器上执行上面写的脚本,部署新版本
# 程序员编写新版本
[root@develop myproject]# vim index.html
<marquee>Welcome to tedu</marquee>
[root@develop myproject]# git add .
[root@develop myproject]# git commit -m "modify index.html"
[root@develop myproject]# git tag 2.0
# 程序员推送到服务器
[root@develop myproject]# git push
[root@develop myproject]# git push --tags
然后在Jenkins网页上点击构建项目 开始构建
在web服务器上运行python脚本 访问ip就能看到部署的文件
你需要知道
1 Jenkins默认会把GitLab仓库代码下载到哪个目录?
/var/lib/jenkins/workspace/
2 如何一条命令将httpd设置开启自启并立刻启动?
systemctl enable httpd --now
3 如何校验数据的哈希值(如md5值)?
md5sum xxx