def get_branch_list(request): # 项目id project_id = request.POST.get('project_id', '') if len(project_id) == 0: return function.ajax_return_exit('项目id不能为空', -1) # 获取项目数据 data = Project.objects.filter(project_id=project_id).first() if data != None: # 获取项目名称 git_dir_address = function.get_git_address( function.get_project_handle_temp_dir(), data.git_ssh_address, data.git_alias) if os.path.exists(git_dir_address) == False: return function.ajax_return_exit('项目路径地址不存在', -2) # 同步远程分支 ret = git.fetch(git_dir_address) if ret != True: return function.json_exit(ret) # 获取版本列表 return function.json_exit(git.get_branch(git_dir_address, '-a')) else: return function.ajax_return_exit('没有找到相关的项目', -3)
def get_version_list(request): # 项目id project_id = request.POST.get('project_id', '') if len(project_id) == 0: return function.ajax_return_exit('项目id不能为空', -1) # 分支名称 branch = request.POST.get('branch') if len(branch) == 0: return function.ajax_return_exit('请选择项目分支', -2) # 获取项目数据 data = Project.objects.filter(project_id=project_id).first() if data != None: # 获取项目名称 git_dir_address = function.get_git_address( function.get_project_handle_temp_dir(), data.git_ssh_address, data.git_alias) if os.path.exists(git_dir_address) == False: return function.ajax_return_exit('项目路径地址不存在', -1) # 清除当前项目改动项 ret = git.clean(git_dir_address) if ret != True: return function.json_exit(ret) # 拉取远程分支最新代码 ret = git.fetch(git_dir_address, branch) if ret != True: return function.json_exit(ret) # 分支切换 ret = git.checkout(git_dir_address, branch) if ret != True: return function.json_exit(ret) # 拉取分支最新代码到本地分支 ret = git.pull(git_dir_address, branch) if ret != True: return function.json_exit(ret) # 获取版本列表 return function.json_exit(git.log(git_dir_address, 30)) else: return function.ajax_return_exit('没有找到相关的项目', -3)
def handle_release(request): # 参数校验 project_id = request.POST.get('project_id', '0') release_id = request.POST.get('release_id', '0') handle_type = int(request.POST.get('handle_type', 1)) if project_id == '0' or release_id == '0': return function.ajax_return_exit('参数错误', -1) # 获取项目数据 project = Project.objects.filter(project_id=project_id).first() if project == None: return function.ajax_return_exit('没有找到相关的项目', -3) # 获取上线工单数据 release = Release.objects.filter(release_id=release_id).first() if release == None: return function.ajax_return_exit('没有找到相关的上线工单', -4) # 获取项目名称 git_dir_address = function.get_git_address(project.dir_address, project.git_ssh_address, project.git_alias) if os.path.exists(git_dir_address) == False: return function.ajax_return_exit('项目路径地址不存在', -5) # 清除当前项目改动项 ret = git.clean(git_dir_address) if ret != True: return function.json_exit(ret) # 上线操作 if handle_type == 1: # 备份当前代码 backup_name = 'backup_' + time.strftime('%Y%m%d%H%M%S', time.localtime()) ret = git.branch(git_dir_address, backup_name) if ret != True: return function.json_exit(ret) # 备份分支推送到远程仓库 ret = git.push(git_dir_address, backup_name) if ret != True: return function.json_exit(ret) # 拉取远程分支最新代码 ret = git.fetch(git_dir_address, release.branch) if ret != True: return function.json_exit(ret) # 分支切换 ret = git.checkout(git_dir_address, release.branch) if ret != True: return function.json_exit(ret) # 拉取分支最新代码到本地分支 ret = git.pull(git_dir_address, release.branch) if ret != True: return function.json_exit(ret) # git更新到工单指定分支与版本 ret = git.reset(git_dir_address, release.version) if ret != True: return function.json_exit(ret) # 更新工单数据 Release.objects.filter(release_id=release_id).update( status=1, backup_name=backup_name) return function.ajax_return_exit('上线成功') # 回滚操作 elif handle_type == 2: # 拉取远程分支最新代码 ret = git.fetch(git_dir_address, release.backup_name) if ret != True: return function.json_exit(ret) # 分支切换 ret = git.checkout(git_dir_address, release.backup_name) if ret != True: return function.json_exit(ret) # 拉取分支最新代码到本地分支 ret = git.pull(git_dir_address, release.backup_name) if ret != True: return function.json_exit(ret) # 更新工单数据 Release.objects.filter(release_id=release_id).update(status=2) return function.ajax_return_exit('回滚成功') # 操作类型有误 else: return function.ajax_return_exit('上线工单类型错误', -99)
def save(request): # 项目id project_id = request.POST.get('project_id', '') # 等于0则添加 if len(project_id) == 0: # 临时操作地址 project_temp_dir = function.get_project_handle_temp_dir() # 项目原始名称 project_git_name = function.get_git_ssh_name( request.POST['git_ssh_address']) # git别名 git_alias = request.POST.get('git_alias', '') # 获取项目地址 git_dir_address = function.get_git_address( request.POST['dir_address'], request.POST['git_ssh_address']) # git别名地址 git_git_alias_address = function.get_git_address( request.POST['dir_address'], '', git_alias) # 项目实际地址-目录不存在则创建 ret = function.mg_mkdir(request.POST['dir_address']) if ret != True: return function.json_exit(ret) # 临时操作地址-目录不存在则创建 ret = function.mg_mkdir(project_temp_dir) if ret != True: return function.json_exit(ret) # 项目实际地址-克隆代码 if os.path.exists(git_dir_address) == False: ret = git.clone(request.POST['dir_address'], request.POST['git_ssh_address']) if ret != True: return function.json_exit(ret) # 临时操作地址-克隆代码 if os.path.exists(project_temp_dir + '/' + project_git_name) == False: ret = git.clone(project_temp_dir, request.POST['git_ssh_address']) if ret != True: return function.json_exit(ret) # 项目别名处理 if len(git_alias) > 0 and git_alias != project_git_name: ret = git_alias_rename(git_dir_address, project_git_name, project_temp_dir, git_alias, git_git_alias_address) if ret != True: return function.json_exit(ret) # 数据添加 Project(project_name=request.POST['project_name'], git_ssh_address=request.POST['git_ssh_address'], git_alias=request.POST['git_alias'], dir_address=request.POST['dir_address'], is_cluster=request.POST['is_cluster'], describe=request.POST['describe']).save() else: # 数据更新 Project.objects.filter(project_id=project_id).update( project_name=request.POST['project_name'], git_ssh_address=request.POST['git_ssh_address'], git_alias=request.POST['git_alias'], dir_address=request.POST['dir_address'], is_cluster=request.POST['is_cluster'], describe=request.POST['describe']) # 返回数据 return function.ajax_return_exit('操作成功')