对于博客来说,我还是直接实践比较好,理论过多,不方便以后的查看
废话不多,直接开干
功能需求:
1.公司需要将jenkins打包出来的压缩包通过git上传到git服务器 2.而且通过版本控制上传的文件,即分支名为版本名 3.git pull上传到git服务器,并且触发post-receive钩子对git服务器文件进行拉取到对应目录解压
功能图表展示:
1.创建git文件
2.版本控制
3.钩子处理
4.git服务器结构
目录结构
客户端
---git
--client.zip
--server.zip
---version.txt #存放需要git上传的目录名
git服务端
---git.git
--hooks
--post-receive
--authoup
--post_receive.py
--config.py
...
客户端代码:
config.py:
#项目上传git的配置信息 git_url = 'ssh://[email protected]' git_dir = 'D:/git' version_dir = 'D:/versions' time_stamp = 'D:/version.txt'
pushgit.py:
# -*- coding: utf-8 -*- import os import shutil import sys, re import traceback import zipfile # dir = os.path.dirname(os.path.abspath(__file__),'/../') sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../") from jenkins_structure import settings # 获取到源码目录名 def get_time_stamp_name(): with open(settings.time_stamp, "r", encoding="utf-8") as f: time_stamp = f.read() return time_stamp # 推送源码到git服务器 def push_git(version_name, version_comment): time_stamp = get_time_stamp_name() get_version_dir = settings.version_dir + "\\" + time_stamp try: #判断是否存在git目录,不存在从则git库克隆下来 if os.path.exists(settings.git_dir) != True: items_dir = os.path.dirname(os.path.abspath(settings.git_dir)) os.chdir(items_dir) os.system("git clone %s" % settings.git_url ) os.system("git checkout -b master") # 切换到存放版本目录并切换master分支,防止其他分支对其造成错误 os.chdir(settings.git_dir) except Exception as e: traceback.print_exc() os.system("git checkout master -f") # 创建git版本分支并切换工作分支到该分支 os.system("git checkout -b %s" % version_name) # 拷贝源码到新的版本目录 shutil.copyfile(get_version_dir + '\\' + "client.zip", settings.git_dir + "\\" + "client.zip") shutil.copyfile(get_version_dir + '\\' + "server.zip", settings.git_dir + "\\" + "server.zip") # # 提交并推送到远程仓库 os.system("git add .") os.system("git commit -m '%s'" % version_comment) os.system("git push origin %s" % version_name)