拉取代码到一个新的目录;如果失败,删除代码目录再重新拉取 :param scm_mgr: :return:
(self, scm_mgr)
| 365 | self.__retry_checkout(sm) |
| 366 | |
| 367 | def __retry_checkout(self, scm_mgr): |
| 368 | """ |
| 369 | 拉取代码到一个新的目录;如果失败,删除代码目录再重新拉取 |
| 370 | :param scm_mgr: |
| 371 | :return: |
| 372 | """ |
| 373 | # 上报进度 |
| 374 | SourceReporter(self.task_type, self.params).checkout_report() |
| 375 | |
| 376 | interval = 30 # 重试间隔(单位: 秒) |
| 377 | retry_max = 2 # 重试次数 |
| 378 | retry_cnt = 0 # 重试计数 |
| 379 | while True: |
| 380 | try: |
| 381 | scm_mgr.get_scm_client().checkout( |
| 382 | revision=self.params["scm_revision"], |
| 383 | enable_submodules=self.enable_submodules, |
| 384 | enable_lfs=self.enable_lfs |
| 385 | ) |
| 386 | if retry_cnt != 0: |
| 387 | logger.info("checkout succeed after %d retries.", retry_cnt) |
| 388 | return |
| 389 | except ScmCommandError as err: |
| 390 | logger.warning("checkout fails on error: %s" % str(err)) |
| 391 | if retry_cnt < retry_max: |
| 392 | # 先清理代码目录 |
| 393 | if self.params["scm_type"] in ["git", "tgit"]: |
| 394 | PathMgr().rmpath(self.params["source_dir"]) |
| 395 | elif self.params["scm_type"] == "svn": |
| 396 | scm_mgr.get_scm_client().cleanup() |
| 397 | |
| 398 | # 准备重试 |
| 399 | retry_cnt += 1 |
| 400 | interval = interval * retry_cnt # 重试间隔递增,第一次间隔30s,第二次60s |
| 401 | logger.warning("retry after %s seconds..." % interval) |
| 402 | time.sleep(interval) |
| 403 | continue |
| 404 | else: |
| 405 | logger.warning("checkout still fails after %s retries!" % retry_cnt) |
| 406 | raise |
| 407 | |
| 408 | |
| 409 | class SourceMiddleInfo(object): |
no test coverage detected