执行本地项目扫描
(self)
| 342 | raise NodeError(code=errcode.E_NODE_TASK_CONFIG, msg=err_msg) |
| 343 | |
| 344 | def run(self): |
| 345 | """执行本地项目扫描 |
| 346 | """ |
| 347 | LogPrinter.info(f"start from {self._create_from}.") |
| 348 | self._job_start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) |
| 349 | |
| 350 | try: |
| 351 | # 获取参数,并判断参数合法性 |
| 352 | self._read_and_check_args(self._args) |
| 353 | |
| 354 | # 如果历史结果文件json存在,先清理掉,以免影响本次扫描 |
| 355 | report_filepath = os.path.abspath(self._report_file) |
| 356 | if os.path.exists(report_filepath): |
| 357 | PathMgr().rmpath(report_filepath) |
| 358 | |
| 359 | # 创建一个与serve通信的API类实例 |
| 360 | self._dog_server = RetryDogServer(self._server_url, self._token).get_api_server(retry_times=2) |
| 361 | |
| 362 | os.environ["TaskScene"] = TaskScene.LOCAL |
| 363 | |
| 364 | # 保存当前环境变量,执行子进程时使用该环境变量,避免被污染 |
| 365 | self._origin_os_env = dict(os.environ) |
| 366 | |
| 367 | # 校验输入的配置信息是否正确,如果有问题,提示重新输入 |
| 368 | self.__check_config_info() |
| 369 | |
| 370 | # 没有指定项目ID,根据本地代码url判断是否已有项目,没有则新建项目 |
| 371 | project_mgr = ProjectMgr(self._scan_plan, self._scheme_template_ids, |
| 372 | self._scheme_templates, self._languages, |
| 373 | self._dog_server, self._org_sid, self._team_name, self._source_dir, |
| 374 | self._include_paths, self._exclude_paths, |
| 375 | self._proj_id, self._scm_info, self._report_file, self._admins, |
| 376 | self._scm_auth_info, self._front_end_url, |
| 377 | self._labels, self._machine_tag, self._ref_scheme_id, self._proj_env, |
| 378 | self._create_from, self._enable_module) |
| 379 | self._repo_id, self._proj_id = project_mgr.check_and_create_proj(self._scan_path) |
| 380 | |
| 381 | # 获取任务执行参数 |
| 382 | proj_conf = self._get_proj_config(self._repo_id, self._proj_id, self._org_sid, self._team_name) |
| 383 | # with open("proj_conf.json", "w") as wf: |
| 384 | # json.dump(proj_conf, wf, indent=2) |
| 385 | |
| 386 | # 获取实际使用的扫描方案名称 |
| 387 | self._scan_plan = proj_conf["job_context"]["scheme_name"] |
| 388 | self._repo_id = proj_conf["job_context"]["repo_id"] |
| 389 | |
| 390 | url_mgr_client = UrlMgr(self._front_end_url, self._repo_id, self._proj_id, org_sid=self._org_sid, |
| 391 | team_name=self._team_name) |
| 392 | proj_overview_url = url_mgr_client.get_proj_overview_url() |
| 393 | LogPrinter.info("Project url: %s" % proj_overview_url) |
| 394 | self._scan_history_url = url_mgr_client.get_scan_history_url() |
| 395 | |
| 396 | # 解析项目配置,获取当前可以直接执行的task request list |
| 397 | request_generator = TaskRequestGenerator( |
| 398 | self._dog_server, self._source_dir, self._total_scan, |
| 399 | self._scm_info, self._scm_auth_info, self._scm_client, |
| 400 | self._report_file, self._server_url, self._scan_history_url, |
| 401 | self._job_web_url, self._exclude_paths, self._include_paths, |
no test coverage detected