记录Jenkins使用的知识点和问题笔记

钉钉插件通知

之前Jenkins的版本是2.264,然后安装了dingdingtalk 插件后在全局设置中,无法正常显示,应该是安卓GUI界面显示不全导致的,然后去插件的Hub中查Q&A,有人提到过这个问题,目前只能用2.263版本以下的。所以只能回退到这个版本,正常使用了。

自动定时构建

H 8 * * * :为每日8点自动构建
每2小时构建一次:H H/2 * * *
记录Jenkins使用的知识点和问题笔记_第1张图片
Build periodically:任务周期性进行项目构建,这个是到指定的时间必须触发构建任务(无论SVN中数据有无变化,均执行定时化的构建)

Poll SCM:
1.Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作(定时轮询SVN,查看SVN中是否有数据变化,如果有变化,则执行构建任务)
2.如果我想每隔5分钟检查一次源码变化,有变化就执行

清理历史版本

记录Jenkins使用的知识点和问题笔记_第2张图片
每次构建时只保留最近10次的历史构建,历史构建默认会保存到C盘Jenkins的安装目录里面。

通过Jenkins打包流程记录

之前公司版本更新流程都是先转表,再编译打包ab,再手动将ab命名,之后手动上传至CDN。之后在通过修改在线参数配置来让用户接受增量。所以我想讲上传Ab这部分步骤进行自动化。以下是记录一下过程:

  • 首先是构建流程描述,
    记录Jenkins使用的知识点和问题笔记_第3张图片
    记录Jenkins使用的知识点和问题笔记_第4张图片
参数名称 具体作用
ProjectPath 项目工程目录
excelChannel 具体为执行转表工具,具体逻辑是默认为工程目录上级目录下的表格目录,下面找到所有的文件名包含**<转表>**这两个字符的文件的文件名存数组返回,目的就是如果多渠道转表工具不同只需要下拉选择对应得转表工具即可
abVersion ab资源版本号,控制打包出来的ab名称版本。
LogVerbose 是否打印unity输出的日志
isUploadAB 控制是否需要自动上传ab至CDN,为了可能只需要打ab出包,不需要上传至CDN这样的需求。
CDN_PATH [账号]:[密码]@[ip地址]:[端口] /[AB存放的目录] 示例:cdnftp:cdnftp#[email protected]:6666/android/update 这个参数具体看使用何种上传工具,公司使用的是FileZilla,用命令行上传的话,需要带上的格式就是这样的。
isCopyCltSvrData 是否copy客户端技能、关卡和战斗DLL至战斗服提交。

ProjectPath 参数具体逻辑如下:

def List = [];
List = ['D:/agame/trunk/android', 'D:/agame/jenkins_test/android'];
return List

excelChannel 参数具体逻辑如下:

File pathFile = new File(ProjectPath  + "/GameUnity/Build/path.bat");
def reg = ~/PRODUCT_DATA_PATH=(.*)"/
def path = ""

pathFile.text.eachLine({line->
    def matcher = reg.matcher(line);
    def result = matcher.find()

    if(result)
    {
        path = matcher.group(1)
    }
})

if(path == "")
{
     tmpPath = ProjectPath  + "/../data"
     File tmpDataDir = new File(tmpPath);
     if(tmpDataDir.exists())
          path = tmpPath;
      else
          return ["path.bat未配置PRODUCT_DATA_PATH"]
}

def dataPath = path
File dir = new File(dataPath);

def names = [];
def regExcel = ~/.*转表.*bat/

dir.eachFile({file-> 
    def matcher = regExcel.matcher(file.name);
    def result = matcher.find()
    if(result)
        //names << file.name;
        names << file.getName().split("\\.")[0]
});

return names

构建过程执行的命令行:

@echo OFF
@echo %ProjectPath%
%ProjectPath:~0,2%

set ext="/GameUnity/Build"
set build_path=%ProjectPath%%ext%

@echo %build_path%
cd %build_path%

call path.bat

python -u BuildJenkins.py
if %ERRORLEVEL% neq 0 exit

set buildType=0
REM echo packageType is:%packageType%
if "%packageType%"=="update" (
   set buildType=1
)

REM python -u BuildCore.py build %abVersion% %buildType%

if "%isCopyCltSvrData%"=="true" (
   python -u BuildCore.py copy_clt_svr_data
)

if "%isUploadAB%"=="true" (
   @echo 开始执行上传AB 
   cd uploadAB
   python -u UploadAb.py %abVersion%
)
  • 具体逻辑执行工程Build目录下的 BuildCore.py 核心逻辑。
  • 配置好Jenkin后只需根据具体需求输入参数开始构建即可。从打包ab资源到上传ab,都可实现自动化。

你可能感兴趣的:(jenkins,运维,ci)