自动识别机器go环境: 1. 优先使用本地机器环境中的Go环境 2. 本地机器没有go的话,便使用CodeDog自带的go环境 :param params: :param force_inner: 强制使用内置的go环境 :return:
(params, force_inner=False)
| 27 | |
| 28 | @staticmethod |
| 29 | def set_go_env(params, force_inner=False): |
| 30 | """ |
| 31 | 自动识别机器go环境: |
| 32 | 1. 优先使用本地机器环境中的Go环境 |
| 33 | 2. 本地机器没有go的话,便使用CodeDog自带的go环境 |
| 34 | :param params: |
| 35 | :param force_inner: 强制使用内置的go环境 |
| 36 | :return: |
| 37 | """ |
| 38 | source_dir = params.source_dir |
| 39 | tool_name = params["tool_name"] |
| 40 | go_home = os.path.basename(os.environ.get("GO_HOME", None)) |
| 41 | go_path = os.environ.get("GOPATH", None) |
| 42 | go_root = os.environ.get("GOROOT", None) |
| 43 | |
| 44 | # 判断本地go环境是否可用 |
| 45 | # 不可用,或者该机器没有go环境的话,便使用codedog维护的go环境 |
| 46 | if force_inner or SubProcController(["go", "version"]).wait() != 0: |
| 47 | logger.info("建议客户将所有第三方依赖库存放到src/vendor目录下,这样可以保证编译时能够被依赖到。") |
| 48 | EnvSet().set_tool_env( |
| 49 | { |
| 50 | tool_name: { |
| 51 | "env_path": {"GOROOT": go_home}, |
| 52 | "env_value": {}, |
| 53 | "path": ["%s/bin" % go_home, f"{go_home}/go/bin"], |
| 54 | "tool_url": [], |
| 55 | } |
| 56 | } |
| 57 | ) |
| 58 | if not go_path: |
| 59 | go_path = [] |
| 60 | else: |
| 61 | # 可以在CodeDog平台上面设置GOPATH指向代码库内的目录 |
| 62 | # 比如:GOPATH=$SOURCE_DIR/imcomm:$SOURCE_DIR:$SOURCE_DIR/third:$GOPATH |
| 63 | go_path = go_path.split(os.pathsep) |
| 64 | go_path.extend([os.path.join(settings.TOOL_BASE_DIR, "%s/go" % go_home), source_dir]) |
| 65 | os.environ["GOPATH"] = os.pathsep.join(go_path) |
| 66 | |
| 67 | if not go_root: |
| 68 | os.environ["GOROOT"] = os.path.join(settings.TOOL_BASE_DIR, go_home) |
| 69 | elif not go_path or not go_root: |
| 70 | # 机器有go环境,但没有设置GOPATH |
| 71 | logger.info( |
| 72 | "建议客户机器设置GOPATH指向go项目根目录和项目依赖路径,最好将所有第三方依赖库存放到项目的src/vendor目录下,保证项目编译通过,以及设置GOROOT指向go安装位置,以防工具执行失败。" |
| 73 | ) |
| 74 | |
| 75 | logger.info("当前使用的Go版本如下所示:") |
| 76 | SubProcController( |
| 77 | ["go", "version"], stdout_line_callback=subprocc_log, stderr_line_callback=subprocc_log |
| 78 | ).wait() |
| 79 | logger.info("GOROOT: %s", os.environ.get("GOROOT", "")) |
| 80 | logger.info("GOPATH: %s", os.environ.get("GOPATH", "")) |
| 81 | |
| 82 | @staticmethod |
| 83 | def is_py_avail(pyname="python", version=None): |