コード例 #1
0
ファイル: views.py プロジェクト: vtatv/Ops
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': '查询版本已存在,请使用回滚功能进行回滚操作'
                })
コード例 #2
0
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())