def mainFunc(delay): global openUnitySucc global openUnityFail global failEnd global allow compilerlog.set_prefix_path(localconfig.GIT_PROJECT_CD_ROOT + "/../") compilerlog.clear_open_log() open_unity() openUnitySucc = True # 有打开的报错 if compilerlog.check_open_log(): failEnd = True localutil.log("open error") return prepareFunc() compilerlog.clear_compiler_log() unity_buildab() unity_compile() if compilerlog.check_compiler_log(): failEnd = True localutil.log("compiler error") return allow = True
def send_mail(succ=True): global BUILD_STATUS mail_content = "" if succ: BUILD_STATUS = "成功" mail_content = construct_success_html() else: BUILD_STATUS = "失败" mail_content = construct_fail_html() # 第三方 SMTP 服务 message = MIMEText(mail_content, 'html', 'utf-8') message['From'] = Header("PC打包机", 'utf-8') message['To'] = Header("测试", 'utf-8') subject = '【构建通知】 PC版本 Build #' + BUILD_ID + ' ' + BUILD_STATUS message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP_SSL(mail_host, mail_port) smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) smtpObj.quit() localutil.log("邮件发送成功") except smtplib.SMTPException: localutil.log("Error: 无法发送邮件")
def main(): localutil.log("Start git update") if not os.path.exists(localconfig.GIT_WWISE_CD_ROOT): os.makedirs(localconfig.GIT_WWISE_CD_ROOT) os.chdir(localconfig.GIT_WWISE_CD_ROOT) localutil.git_config() localutil.git_update(GIT_URL, GIT_BRANCH) localutil.log("End git update")
def copy_files(): # 先删除原有数据目录 localutil.log("开始删除原有trunk数据") if os.path.exists(DEST_PATH): shutil.rmtree(DEST_PATH) # 再把新的数据拷贝过去 localutil.log("开始拷贝数据到trunk") shutil.copytree(SRC_PATH, DEST_PATH)
def get_svn_revision(): os.chdir(CD_ROOT) infos = collect_cmd_output(SVN_INFO) localutil.log(infos) split_datas = infos.split('\n') for item in split_datas: if item.startswith('Revision'): return item[10:len(item)]
def main(): localutil.log("start git update") os.chdir(CD_ROOT) localutil.git_config() git_infos_before = localutil.git_log() localutil.git_update(GIT_URL, GIT_BRANCH) git_infos_after = localutil.git_log() localutil.git_diff_log(git_infos_before, git_infos_after, CD_GIT_LOG_PRINT_TXT) localutil.log("end git update")
def generate_cmd_files(time_version): localutil.log("开始生成bat文件") f = open(BAT_FILE_NAME, 'w') write_content = BAT_CONTENT % time_version f.write(write_content) f.close() localutil.log("开始生成sh文件") f = open(SH_FILE_NAME, 'w') write_content = SH_CONTENT % time_version f.write(write_content) f.close()
def main(): localutil.log("开始压缩复制文件") localutil.execute("C:/Windows/Rar.exe a -ag" + localconfig.BUILD_TIMESTAMP + " -ep1 -df -m1 " + localconfig.SRC_EXE_PATH + localconfig.GIT_PROJECT_COMPRESS_NAME + " " + localconfig.GIT_PROJECT_PACK_PC_CD_ROOT + localconfig.GIT_PROJECT_COMPRESS_NAME + "*/") # 上面一步到位 # shutil.copyfile(localconfig.GIT_PROJECT_PACK_PC_CD_ROOT + localconfig.GIT_PROJECT_COMPRESS_NAME + localconfig.BUILD_TIMESTAMP + ".rar", # localconfig.SRC_EXE_PATH + localconfig.GIT_PROJECT_COMPRESS_NAME + localconfig.BUILD_TIMESTAMP + ".rar") localutil.log("结束压缩复制文件")
def upload_to_ftp(): ftp = FTP() localutil.log("开始尝试连接ftp服务器") ftp.connect(localconfig.FTP_IP, localconfig.FTP_PORT) localutil.log("开始尝试登录ftp服务器") ftp.login(localconfig.FTP_USERNAME, localconfig.FTP_PASSWORD) src_file = localconfig.SRC_EXE_PATH + localconfig.GIT_PROJECT_COMPRESS_NAME + localconfig.BUILD_TIMESTAMP + ".rar" ftp_file = localconfig.FTP_EXE_PATH + localconfig.GIT_PROJECT_COMPRESS_NAME + localconfig.BUILD_TIMESTAMP + ".rar" if not os.path.isfile(src_file): localutil.log("文件" + src_file + "不存在,取消上传") return fp = open(src_file, 'rb') localutil.log("开始上传文件到ftp服务器") ftp.storbinary("STOR %s" % ftp_file, fp) localutil.log("上传结束,关闭句柄") fp.close() ftp.close()
def check_compiler_log(): if not os.path.exists(get_compile_log_path()): return False f = open(get_compile_log_path()) lines = f.read() f.close() localutil.log( "================================Unity Error================================" ) print(lines) localutil.log( "===========================================================================" ) compile_error = False if lines.find("[Exception]") != -1: compile_error = True if lines.find("error CS") != -1: compile_error = True return compile_error
def check_open_log(): if not os.path.exists(get_open_log_path()): return False f = open(get_open_log_path()) have_error = False line = f.readline() while line: if line.find("error CS") != -1: if not have_error: localutil.log( "================================Unity Open Error================================" ) have_error = True print(line) line = f.readline() if have_error: localutil.log( "===========================================================================" ) f.close() return have_error
def build(): localutil.log("start build") # 创建两个线程 try: _thread.start_new_thread(childFunc, (2, )) _thread.start_new_thread(mainFunc, (4, )) except: localutil.log("Error: unable to start thread") while not allow and not failEnd: pass if failEnd: localutil.exit_fail() return localutil.log("build success") localutil.exit_success()
def kill_unity(): localutil.log("force kill unity") localutil.execute('taskkill /f /im unity.exe')
def param_test(): nowTime = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M') localconfig.LOCAL_BUILD_TIMESTAMP_STR = nowTime localutil.log(localconfig.LOCAL_BUILD_TIMESTAMP_STR)
def check_argv_git_branch(): global GIT_BRANCH if len(sys.argv) >= 3: GIT_BRANCH = sys.argv[2] localutil.log("准备切换到git分支:" + sys.argv[2])
def svn_update(): localutil.log("先svn的trunk更到最新") os.chdir(CD_ROOT) localutil.execute(SVN_UPDATE)
# 创建两个线程 try: _thread.start_new_thread(childFunc, (2, )) _thread.start_new_thread(mainFunc, (4, )) except: localutil.log("Error: unable to start thread") while not allow and not failEnd: pass if failEnd: localutil.exit_fail() return localutil.log("build success") localutil.exit_success() # 配置命令编译参数 def append_argv(): global UNITY3D_COMPILE_CMD_FOR_PC append_args = localutil.get_current_argv_without_disable() UNITY3D_COMPILE_CMD_FOR_PC = UNITY3D_COMPILE_CMD_FOR_PC + append_args if __name__ == '__main__': if localutil.check_disable(): localutil.log("disable") else: append_argv() build()
def param_test(): localutil.log(localconfig.BUILD_TIMESTAMP)
def log_argv(): index = 0 for item in sys.argv: localutil.log("[" + str(index) + "]" + item + " ") index = index + 1
def unity_compile(): localutil.log("compile unity") if localutil.execute(UNITY3D_COMPILE_CMD_FOR_PC): localutil.log("Execute opne cmd failed")
def unity_buildab(): localutil.log("build assetbundle") if localutil.execute(localconfig.UNITY3D_BUILDAB_CMD_FOR_PC): localutil.log("Execute compile cmd failed")
def open_unity(): localutil.log("open unity") if localutil.execute(localconfig.UNITY3D_OPEN_CMD): localutil.log("Execute open cmd failed")
GIT_BRANCH = sys.argv[2] localutil.log("准备切换到git分支:" + sys.argv[2]) def main(): localutil.log("start git update") os.chdir(CD_ROOT) localutil.git_config() git_infos_before = localutil.git_log() localutil.git_update(GIT_URL, GIT_BRANCH) git_infos_after = localutil.git_log() localutil.git_diff_log(git_infos_before, git_infos_after, CD_GIT_LOG_PRINT_TXT) localutil.log("end git update") # 打印参数 第一个参数(index = 1)为disable 第二个参数为切换的分支 def log_argv(): index = 0 for item in sys.argv: localutil.log("[" + str(index) + "]" + item + " ") index = index + 1 if __name__ == "__main__": localutil.log("准备执行项目git更新相关") log_argv() if not localutil.check_disable(): check_argv_git_branch() main()