Exemplo n.º 1
0
def api_update_user_projects_by_id(id):
    user = users.get(id)
    user.projects = []
    for project in request.form.getlist("projects[]"):
        user.projects.append(projects.get(int(project)))
    users.save(user)
    return jsonify(dict(rc=0))
Exemplo n.º 2
0
def api_update_user_projects_by_id(id):
    user = users.get(id)
    user.projects = []
    for project in request.form.getlist("projects[]"):
        user.projects.append(projects.get(int(project)))
    users.save(user)
    return jsonify(dict(rc=0))
Exemplo n.º 3
0
    def publish(self, deploy):
        """
        :type deploy: Deploys
        :rtype: str
        """

        msg = ""
        current_path = os.getcwd()

        # 创建临时目录
        temp_dir = "%s/temp/%s/" % (current_path, deploy.project_id)
        if os.path.exists(temp_dir) is False:
            os.makedirs(temp_dir)

        # unzip 文件到 临时目录
        cmd = sh.Command("unzip")
        msg = "%s\n%s" % (msg, cmd("-o", deploy.package_path, "-d", temp_dir))

        # get project directory
        project_dir = os.path.join(temp_dir, deploy.package_name[:-4])

        # get files which md5 not matched
        not_match_files, files = self._check_md5(project_dir)
        if len(not_match_files) > 0:
            msg += "\n".join(not_match_files)

        project = project_service.get(deploy.project_id)
        """:type: Projects"""

        if project.prefix not in PROJECT_SERVERS:
            return "未找到项目配置"

        msg += str(self.add_to_git(project_dir, project.prefix))

        # delete template directory
        rm = sh.Command("rm")
        rm("-rf", project_dir)

        print "deploy.project.after_deploy:", deploy.project.after_deploy
        if deploy.project.after_deploy != "":
            shell = "%s/shells/projects/%s" % (current_path, deploy.project.after_deploy)
            if os.path.exists(shell):
                os.chmod(shell, 0o777)
                after_deploy = sh.Command(shell)
                msg += str(after_deploy(current_path))
                print "execute after delploy shell:",
            else:
                print "%s" % shell, " shell file does not exist"

        return msg
Exemplo n.º 4
0
    def rollback(self, deploy):
        """
                :type deploy: Deploys
                :rtype: str
                """

        msg = ""
        current_path = os.getcwd()

        project = project_service.get(deploy.project_id)
        """:type: Projects"""

        if project.prefix not in PROJECT_SERVERS:
            return "未找到项目配置"

        msg += str(self.rollback_to_git(project.prefix))

        return msg
Exemplo n.º 5
0
def api_project_branch_commits(id, branch):
    logger.debug("get branch commits:{0}, branch:{1}".format(id, branch))
    project = projects.get(id)
    projects.git_clone(project)
    return jsonify(dict(rc=0, data=projects.git_branch_commit_log(project, branch)))
Exemplo n.º 6
0
def api_project_tags(id):
    project = projects.get(id)
    projects.git_clone(project)
    return jsonify(dict(rc=0, data=projects.git_tag(project)))
Exemplo n.º 7
0
def api_delete_project_by_id(id):
    projects.delete(projects.get(id))
    return jsonify(dict(rc=0))
Exemplo n.º 8
0
def api_update_project_by_id(id):
    projects.update(projects.get(id), **request.form.to_dict())
    return jsonify(dict(rc=0))
Exemplo n.º 9
0
def api_get_project_by_id(id):
    return jsonify(dict(rc=0, data=projects.get(id)))
Exemplo n.º 10
0
def api_post_deploy():
    if "package" not in request.files:
        return jsonify(dict(rc=-1, msg="未上传文件"))

    project_id = request.args.get("project_id")
    if project_id < 1:
        return jsonify(dict(rc=-1, msg="未选择项目"))

    project = projects.get(project_id)
    """ :type: Projects"""
    if project is None:
        return jsonify(dict(rc=-1, msg="项目不存在"))

    if project.users is None:
        return jsonify(dict(rc=-1, msg="不具备该项目的权限[1]"))

    if g.user.id != 1 and project.users[0].id != g.user.id:
        return jsonify(dict(rc=-1, msg="不具备该项目的权限[2]"))

    savePath = "%s/uploads/%s/%s" % (os.getcwd(), datetime.datetime.today().strftime('%Y/%m/%d'), project_id)
    if os.path.exists(savePath) is False:
        os.makedirs(savePath, 0755)

    file = request.files["package"]
    """ :type: werkzeug.datastructures.FileStorage"""
    if file.filename == "":
        return jsonify(dict(rc=-1, msg="未上传文件1"))

    secureFilename = secure_filename(file.filename)
    saveFile = os.path.join(savePath, secureFilename)

    if secureFilename[-4:] != ".zip":
        return jsonify(dict(rc=-1, msg="文件类型必须为.zip"))

    # 文件前缀检查,避免传错项目文件
    print secureFilename[:-4], project.prefix
    if secureFilename.startswith(project.prefix) == False:
        return jsonify(dict(rc=-1, msg="项目文件前缀不符合,您可以传错文件了"))

    file.save(saveFile)

    host_id = request.args.get("host_id")
    mode = request.form.get("mode", type=int)
    tag = request.form.get("tag")
    branch = request.form.get("branch") if mode == 0 else ""
    commit = request.form.get("commit") if mode == 0 else tag
    tag = ""

    host_id = 0
    mode = 0
    branch = ""

    commit = ""

    deploy = deploys.create(
        user_id=g.user.id,
        package_name=secureFilename,
        package_path=saveFile,
        project_id=project_id,
        host_id=host_id,
        mode=mode,
        status=2,
        branch=branch,
        version=commit,
        softln_filename=time.strftime(
            "%Y%m%d-%H%M%S") + "-" + commit,
    )
    # deploys.deploy(deploy)
    return jsonify(dict(rc=0, data=dict(id=deploy.id)))
Exemplo n.º 11
0
def api_update_project_by_id(id):
    projects.update(projects.get(id), **request.form.to_dict())
    return jsonify(dict(rc=0))
Exemplo n.º 12
0
def api_get_project_by_id(id):
    return jsonify(dict(rc=0, data=projects.get(id)))
Exemplo n.º 13
0
def api_project_branch_commits(id, branch):
    project = projects.get(id)
    projects.git_clone(project)
    return jsonify(dict(rc=0, data=projects.git_branch_commit_log(project, branch)))
Exemplo n.º 14
0
def api_project_branch_commits(id, branch):
    project = projects.get(id)
    projects.git_clone(project)
    return jsonify(
        dict(rc=0, data=projects.git_branch_commit_log(project, branch)))
Exemplo n.º 15
0
def api_project_tags(id):
    project = projects.get(id)
    projects.git_clone(project)
    return jsonify(dict(rc=0, data=projects.git_tag(project)))