自动化打包

Jenkins之Windows msi按照过程中Invalid Logon_Ox80070533_MyFreeIT的博客-CSDN博客

垃圾jenkins ,用teamcity了

# coding: utf-8
import os
import subprocess
import sys
import re
import io
import codecs
    
project_path = sys.argv[1]
is_debug = sys.argv[2]
up_version = sys.argv[3]
platform = sys.argv[4]
use_hotfix = sys.argv[5]
use_aab = sys.argv[6]
svn_path = sys.argv[7]
qq_group = sys.argv[8]
build_path = project_path + "/Build"
svn_commit_path = build_path


sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

def SafeHandleFunction(log='', errorlog='', errorcode=-1):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if len(log) != 0:
                LogConsole(log)
            try:
                result = func(*args, **kwargs)
                return result
            except Exception as ex:
                if len(errorlog) != 0:
                    LogConsole(errorlog, 1)
                LogConsole(str(ex), 1)
                exit(errorcode)
            return func

        return wrapper

    return decorator

# 基类
class BaseBuilder:
    def __init__(self):
        # get base environment
        self.UnityAppPath = "C:/Program\" \"Files/Unity/Hub/Editor/2019.4.24f1c1/Editor/Unity.exe"
        self.LogFilePath = build_path+"/buildLog.log"
        self.Error = ""

        #set environment
        self.args = []
        self.args.append("--BUILDPATH:"+build_path)
        self.args.append("--DEBUG:"+is_debug)
        self.args.append("--UPVERSION:"+up_version)
        self.args.append("--PLATFORM:"+platform)
        self.args.append("--USEHOTFIX:"+use_hotfix)
        self.args.append("--AAB:"+use_aab)

    def CheckBuildState(self):
        f = open(self.LogFilePath,"r",encoding="utf-8")
        lines = f.readlines()
        last_line = lines[-1]
        if(last_line.find("1") >= 0):
            for line in lines:
                if(line.find("error")) >= 0:
                    self.Error += line
        
    @SafeHandleFunction("Begin to build UnityProject", errorlog="Build UnityProject Error", errorcode=-1)
    def Build(self):
        buildFunction = "Framework.Editor.Build.JenkinsBuild"
        UnityBuildCmd = "{} -batchmode -quit -nographics -executeMethod {} -logFile {} -projectPath {} {}".format(
            self.UnityAppPath, buildFunction, self.LogFilePath, project_path, " ".join(self.args))
        ExecuteBuildShell(UnityBuildCmd)

    

def LogConsole(content, isError=False):
    print('\n<--- ' + str(content) + ' --->')
    return
    if not isError:
        sys.stdout.write('\n<--- ' + str(content) + ' --->')
        sys.stdout.flush()
        print('\n<--- ' + str(content) + ' --->')
    else:
        sys.stderr.write('\n<--- ' + str(content) + ' --->')
        sys.stderr.flush()

def ExecuteBuildShell(command):
    shell_name = "tmp.sh"
    f=open(shell_name,"w")
    command="`"+command+"`"
    LogConsole(command)
    f.write(command)
    f.close()
    result = 1
    result = subprocess.call(shell_name, executable=None, shell=True)
    LogConsole("result: " + str(result))
    os.remove(shell_name)
    return result

def ExecuteShell(command,encod= "utf-8"):
    LogConsole(command)
    result = subprocess.check_output(command,encoding=encod)
    LogConsole("result: " + str(result))
    return result

def update_svn():
    result= ExecuteShell("svn info {} --show-item revision".format(svn_path))
    old_version = int(result)
    ExecuteShell("svn update {}".format(svn_path))
    result= ExecuteShell("svn info {} --show-item revision".format(svn_path))
    new_version = int(result)
    if(old_version != new_version):
        update_info = ExecuteShell("svn log {} -r {}:{}".format(svn_path, old_version, new_version),"ANSI")
        return update_info
    return ""

def commit_svn():
    file_status = ExecuteShell("svn status {}".format(svn_commit_path))
    status = file_status.split("\n")
    need_del_file_path = []
    for s in status:
        if(len(s) > 1):
            match = re.match(r"(.*?)(\s+?)(\w+[\d\D]*)",s)
            if(match.group(1) == "!"):
                need_del_file_path.append(match.group(3))
    for del_file in need_del_file_path:
        ExecuteShell("svn delete {}".format(del_file.strip()))
    ExecuteShell("svn add {} --force".format(svn_commit_path))
    ExecuteShell('svn commit {} -m "commit build ...."'.format(svn_commit_path))

result = update_svn()
obj = BaseBuilder()
obj.Build()
obj.CheckBuildState()
commit_svn()
if(obj.Error != ""):
    result = "打包失败🌧🌧🌧🌧:\n" + result +"\n"+ obj.Error
    raise Exception(obj.Error)
else:
    result = "打包成功👏👏👏👏:\n"+"下载地址:http://192.168.0.177:8081/ \n" + result +"\n"+ obj.Error
ExecuteShell(r"python C:\Users\BJ-2101\Desktop\jenkins_build\send_qq_msg.py {} {}".format(qq_group, result))

set svn_path=C:/work
set project_path=C:/work/teama/slg
set qq_group=166404167
set debug=%1%
set up_version=%2%
set platform=%3%
set use_hotfix=%4%
set use_aab=%5%
REM `C:/Program" "Files/Unity/Hub/Editor/2019.4.24f1c1/Editor/Unity.exe -batchmode -quit -executeMethod Framework.Editor.Build.JenkinsBuild -logFile $build_path/buildLog.log -projectPath $project_path --BUILDPATH:$build_path --DEBUG:$1 --UPVERSION:$2 --PLATFORM:$3 --USEHOTFIX:$4 --AAB:$5`
REM `C:/Program" "Files/Unity/Hub/Editor/2019.4.24f1c1/Editor/Unity.exe -batchmode -quit -executeMethod Framework.Editor.Build.JenkinsBuild -logFile $build_path/buildLog.log -projectPath $project_path --BUILDPATH:$build_path --DEBUG:true --UPVERSION:false --PLATFORM:StandaloneWindows --USEHOTFIX:false --AAB:false`
python C:/Users/BJ-2101/Desktop/jenkins_build/build.py %project_path% %debug% %up_version% %platform% %use_hotfix% %use_aab% %svn_path% %qq_group%
REM python C:/Users/BJ-2101/Desktop/jenkins_build/build.py %project_path% true false StandaloneWindows false false %svn_path% %qq_group%
echo build finish
pause

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值