diff --git a/script/deploy_helper.py b/script/deploy_helper.py index aaaf106..b971ab2 100644 --- a/script/deploy_helper.py +++ b/script/deploy_helper.py @@ -10,6 +10,31 @@ from types import SimpleNamespace import os import subprocess +import logging + + +def setup_logger(log_level=logging.INFO): + """ + 配置全局日志系统。 + + :param log_level: 设置日志记录级别,默认为 INFO 级别。 + """ + logging.basicConfig(level=log_level, + format='%(asctime)s - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S') + + +def command_checker(status_code: int, message: str, expected_code: int = 0): + """ + 检查命令执行的状态码是否符合预期。 + + :param status_code: 实际命令执行的状态码 + :param message: 要记录的日志信息 + :param expected_code: 预期的状态码,默认为0 + """ + if status_code != expected_code: + logging.error(f"Command failed: {message} Expected status code {expected_code}, got status code {status_code}.") + exit(status_code) # open config_path and default_config_path @@ -65,8 +90,7 @@ def create_systemd_service(config): """ res = os.system( f'echo "{gcs_file_content}" | sudo tee {service_full_path}') - if res != 0: - exit(res) + command_checker(res, f"echo \"{gcs_file_content}\" | sudo tee {service_full_path} failed", 0) # TODO: add checker to check @@ -75,18 +99,14 @@ def deploy_on_ubuntu(config): return -1 if config.runTest: res = os.system('mvn test') - if res != 0: - print("Test failed.") - return res + command_checker(res, "mvn test failed.", 0) if config.deploy: res = subprocess.run('bash script/get_jar_position.sh', shell=True, capture_output=True, text=True) - if res.returncode != 0: - return res.returncode + command_checker(res.returncode, "script/get_jar_position.sh failed.", 0) package_path = res.stdout.strip() res = os.system('mvn package') - if res != 0: - return res + command_checker(res, "mvn package failed.", 0) if os.system(f"cat /etc/passwd | grep -w -E '^{config.serviceUser}'") != 0: os.system(f'sudo useradd {config.serviceUser}') @@ -103,44 +123,51 @@ def deploy_on_ubuntu(config): if not os.path.exists(os.path.dirname(config.serviceStartJarFile)): os.system(f'sudo mkdir -p {os.path.dirname(config.serviceStartJarFile)}') res = os.system(f'sudo cp {package_path} {config.serviceStartJarFile}') - if res != 0: - return res + command_checker(res, f"sudo cp {package_path} failed", 0) create_systemd_service(config) if config.serviceEnable: res = os.system(f'sudo systemctl enable {config.serviceName}') - if res != 0: - return res + command_checker(res, f"sudo systemctl enable {config.serviceName} failed", 0) else: res = os.system(f'sudo systemctl disable {config.serviceName}') - if res != 0: - return res + command_checker(res, f"sudo systemctl disable {config.serviceName} failed", 0) res = os.system(f'sudo systemctl start {config.serviceName}') - if res != 0: - return res + command_checker(res, f"sudo systemctl start {config.serviceName} failed", 0) # TODO: finish deploy on docker # TODO: add checker to check def clean(config): - os.system(f'sudo systemctl disable {config.serviceName}') - os.system(f'sudo systemctl stop {config.serviceName}') + res = os.system(f'sudo systemctl disable {config.serviceName}') + command_checker(res, f"sudo systemctl disable {config.serviceName} failed", 0) + res = os.system(f'sudo systemctl stop {config.serviceName}') + command_checker(res, f"sudo systemctl stop {config.serviceName} failed", 0) if os.path.exists(f'/etc/systemd/system/{config.serviceName}.{config.serviceSuffix}'): - os.system( + res = os.system( f'sudo rm -rf /etc/systemd/system/{config.serviceName}.{config.serviceSuffix} && ' f'sudo systemctl daemon-reload') - os.system(f'sudo systemctl reset-failed {config.serviceName}') + command_checker(res, f"sudo rm -rf /etc/systemd/system/{config.serviceName}.{config.serviceSuffix} && \ + sudo systemctl daemon-reload failed", 0) + res = os.system(f'sudo systemctl reset-failed {config.serviceName}') + command_checker(res, f"sudo systemctl reset-failed {config.serviceName} failed", 0) if os.path.exists(f'{config.serviceWorkingDirectory}'): - os.system(f'sudo rm -rf {config.serviceWorkingDirectory}') + res = os.system(f'sudo rm -rf {config.serviceWorkingDirectory}') + command_checker(res, f"sudo rm -rf {config.serviceWorkingDirectory} failed", 0) if os.path.exists(f'{config.serviceStartJarFile}'): - os.system(f'sudo rm -rf {config.serviceStartJarFile}') + res = os.system(f'sudo rm -rf {config.serviceStartJarFile}') + command_checker(res, f"sudo rm -rf {config.serviceStartJarFile} failed", 0) if os.path.exists(f'{config.servicePIDFile}'): - os.system(f'sudo rm -rf {config.servicePIDFile}') + res = os.system(f'sudo rm -rf {config.servicePIDFile}') + command_checker(res, f"sudo rm -rf {config.servicePIDFile} failed", 0) if os.system(f"cat /etc/passwd | grep -w -E '^{config.serviceUser}'") == 0: - os.system(f'sudo userdel {config.serviceUser}') - os.system(f'mvn clean') + res = os.system(f'sudo userdel {config.serviceUser}') + command_checker(res, f"sudo userdel {config.serviceUser} failed", 0) + res = os.system(f'mvn clean') + command_checker(res, f"mvn clean failed", 0) if __name__ == "__main__": + setup_logger() parser = argparse.ArgumentParser( description="Deploy the project when the environment is ready.") parser.add_argument('--config-path', nargs='?', default='../config.json',