def deploy(request, pk): config = ProjectConfig.objects.select_related('project').get(id=pk) if request.method == 'GET': key = request.GET.get('key', None) if config.repo == 'git': git_tool = GitTools(repo_url=config.repo_url, path=config.src_dir, env=config.project.project_env) if key: if key == 'model': try: git_tool.clone(prev_cmds=config.prev_deploy) if config.repo_model == 'branch': branches = git_tool.remote_branches return JsonResponse({ 'code': 200, 'models': branches, 'msg': '获取成功!' }) elif config.repo_model == 'tag': tags = git_tool.tags return JsonResponse({ 'code': 200, 'models': tags, 'msg': '获取成功!' }) except Exception as e: return JsonResponse({ 'code': 500, 'msg': '获取失败:{}'.format(e) }) elif key == 'commit': try: branch = request.GET.get('branch') mode = request.GET.get('mode') if request.GET.get('new_commit'): git_tool.pull(branch) commits = git_tool.get_commits( branch, versions=config.versions.split(','), mode=mode, max_count=20) return JsonResponse({ 'code': 200, 'data': commits, 'msg': '获取成功!' }) except Exception as e: return JsonResponse({ 'code': 500, 'msg': '获取失败:{}'.format(e) }) else: if os.path.exists(git_tool.proj_path): local_branches = git_tool.local_branches local_tags = git_tool.tags mode = request.GET.get('mode', None) if mode: return render(request, 'projs/deploy.html', locals()) else: mode = 'deploy' return render(request, 'projs/deploy.html', locals()) elif config.repo == 'svn': svn_tool = SVNTools(repo_url=config.repo_url, path=config.src_dir, env=config.project.project_env, username=config.repo_user, password=config.repo_password) if key: if key == 'model': try: if config.repo_model == 'branch': branches = svn_tool.branches return JsonResponse({ 'code': 200, 'models': branches, 'msg': '获取成功!' }) elif config.repo_model == 'tag': tags = svn_tool.tags return JsonResponse({ 'code': 200, 'models': tags, 'msg': '获取成功!' }) except Exception as e: return JsonResponse({ 'code': 500, 'msg': '获取失败:{}'.format(e) }) elif key == 'commit': branch = request.GET.get('branch') mode = request.GET.get('mode') try: if branch == 'trunk': commits = svn_tool.get_commits( versions=config.versions.split(','), mode=mode, limit=30) else: commits = svn_tool.get_commits( versions=config.versions.split(','), repo_model='branch', model_name=branch, mode=mode, limit=30) return JsonResponse({ 'code': 200, 'data': commits, 'msg': '获取成功!' }) except Exception as e: return JsonResponse({ 'code': 500, 'msg': '获取失败:{}'.format(e) }) else: mode = request.GET.get('mode', None) if mode is not None: return render(request, 'projs/deploy.html', locals()) else: mode = 'deploy' return render(request, 'projs/deploy.html', locals()) elif request.method == 'POST': commit = request.POST.get('commit') mode = request.POST.get('mode') version = commit if commit else request.POST.get('branch_tag') db_versions = config.versions.split(',') if mode == 'rollback': if version in db_versions: return JsonResponse({'code': 200, 'msg': '查询版本存在,可以执行回滚操作!'}) else: return JsonResponse({ 'code': 403, 'msg': '查询版本不存在,无法执行回滚操作,请使用部署功能进行部署' }) elif mode == 'deploy': if version not in db_versions: return JsonResponse({'code': 200, 'msg': '查询版本不存在,可以执行部署操作!'}) else: return JsonResponse({ 'code': 403, 'msg': '查询版本已存在,请使用回滚功能进行回滚操作' })
def read_branch(request, pk): config = ProjectConfig.objects.get(id=pk) if request.method == 'GET': key = request.GET.get('key', None) mode = request.GET.get('mode', 'deploy') env = request.GET.get('env','noenv') if config.repo == 'git': git_tool = GitTools(repo_url=config.repo_url, path=config.src_dir, env=env) if key: if key == 'model': try: git_tool.clone(prev_cmds=config.prev_deploy) if config.repo_model == 'branch': branches = git_tool.remote_branches return JsonResponse({'code': 200, 'models': branches, 'msg': '获取成功!'}) elif config.repo_model == 'tag': tags = git_tool.tags(versions=config.versions.split(','), mode=mode) return JsonResponse({'code': 200, 'models': tags, 'msg': '获取成功!'}) except Exception as e: return JsonResponse({'code': 500, 'msg': '获取失败:{}'.format(e)}) elif key == 'commit': try: branch = request.GET.get('branch') mode = request.GET.get('mode') if request.GET.get('new_commit'): git_tool.pull(branch) commits = git_tool.get_commits(branch, versions=config.versions.split(','), mode=mode, max_count=20) return JsonResponse({'code': 200, 'data': commits, 'msg': '获取成功!'}) except Exception as e: return JsonResponse({'code': 500, 'msg': '获取失败:{}'.format(e)}) else: if os.path.exists(git_tool.proj_path): local_branches = git_tool.local_branches local_tags = tags = git_tool.tags(versions=config.versions.split(','), mode=mode) return render(request, 'projs/deploy.html', locals()) elif config.repo == 'svn': svn_tool = SVNTools(repo_url=config.repo_url, path=config.src_dir, env=config.project.project_env, username=config.repo_user, password=config.repo_password) if key: if key == 'model': try: if config.repo_model == 'branch': branches = svn_tool.branches return JsonResponse({'code': 200, 'models': branches, 'msg': '获取成功!'}) elif config.repo_model == 'tag': tags = svn_tool.tags(versions=config.versions.split(','), mode=mode) return JsonResponse({'code': 200, 'models': tags, 'msg': '获取成功!'}) except Exception as e: return JsonResponse({'code': 500, 'msg': '获取失败:{}'.format(e)}) elif key == 'commit': branch = request.GET.get('branch') try: if branch == 'trunk': commits = svn_tool.get_commits(versions=config.versions.split(','), mode=mode, limit=30) else: commits = svn_tool.get_commits(versions=config.versions.split(','), repo_model='branch', model_name=branch, mode=mode, limit=30) return JsonResponse({'code': 200, 'data': commits, 'msg': '获取成功!'}) except Exception as e: return JsonResponse({'code': 500, 'msg': '获取失败:{}'.format(e)}) else: return render(request, 'projs/deploy.html', locals())