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))
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
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
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)))
def api_project_tags(id): project = projects.get(id) projects.git_clone(project) return jsonify(dict(rc=0, data=projects.git_tag(project)))
def api_delete_project_by_id(id): projects.delete(projects.get(id)) return jsonify(dict(rc=0))
def api_update_project_by_id(id): projects.update(projects.get(id), **request.form.to_dict()) return jsonify(dict(rc=0))
def api_get_project_by_id(id): return jsonify(dict(rc=0, data=projects.get(id)))
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)))
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)))
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)))