这里默认大家jenkins和unity打包环境都是搭建好的
如果没有的话自行搜一下 把环境搭建一下
接下来就是配置Jenkins windows+Android打包
到插件列表里把Unity3D插件下载一下
然后去配置一下环境
这里我配置Gradle 因为的项目是先打出android工程 然后gradle打包的
回到这里 把Unity安装路径配置一下
配置好这些就可以创建Jenkins项目了
填写个名字 点击确定
这里是构建参数 在这里填写 然后到Unity里接收进行打包
这里是配置好工程地址 我这里使用的是SVN 使用git自行改一下就好
这里强调一下 %WORKSPACE% 是你远程目录的地址 我是把这个python放在了 SVN目录\BuildTools\BuildScript 里
BuildAndroid.py 是我的脚本 ![](https://i-blog.csdnimg.cn/blog_migrate/914b4a9dacf02ba764886db30d7bb11b.png)
C:\Users\yuzixiao\AppData\Local\Programs\Python\Python35\python.exe 是我的python路径
import sys
import os
import fileinput
import subprocess
if __name__ == '__main__':
#Jenkins传递 无需手动修改
jenkinsParams = {
'WorkSpace':os.environ['WorkSpace'].strip().replace('\\', '/'),
'ProductName':os.environ['ProductName'].strip()
}
#本地参数 需手动修改
localParams = {
'UnityPath':'F:\Unity\u2018420f1\Unity\Editor\Unity.exe',
'ProjectPath':jenkinsParams['WorkSpace'] + '/unity-east',
'LogPath':jenkinsParams['WorkSpace'] + '/OutPut/apk_log.txt',
}
print('Jenkins参数')
print(jenkinsParams)
print('本地参数')
print(localParams)
print('开始构建');
#调用BuildEditor.BuildAPK方法 编译APK
cmd = '"' + localParams['UnityPath'] + '" -batchmode -projectPath "' + localParams['ProjectPath'] + '" -nographics -executeMethod CMDBuild.CMDBuildAndroid -logFile "' + localParams['LogPath'] + '" -quit '+ jenkinsParams['ProductName'];
print(cmd);
subprocess.call(cmd);
#在Jenkins中打印Log
fileHandler = open(localParams['LogPath'], mode='r', encoding='UTF-8')
report_lines = fileHandler.readlines()
for line in report_lines:
print(line.rstrip())
print('结束构建')
unity-east 是我SVN路径下的 unity工程目录 这里是调用了 我工程里
CMDBuild.CMDBuildAndroid CMDBuild脚本的 CMDBuildAndroid方法
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Build.Reporting;
using Debug = UnityEngine.Debug;
public class CMDBuild : Editor
{
const string LOCATION_PATH_ANDROID = "./android.apk";
public static void CMDBuildAndroid(){
string ProductName = "";
Debug.Log("------------- 接收命令行参数 -------------");
List<string> commondList = new List<string>();
foreach (string arg in System.Environment.GetCommandLineArgs()) {
Debug.Log("命令行传递过来参数:" + arg);
commondList.Add(arg);
}
try {
Debug.Log("命令行传递过来参数数量:" + commondList.Count);
ProductName = commondList[commondList.Count - 1];
}
catch (Exception e) {
Debug.Log("接收命令行参数出错: "+e.Message);
}
//ProductName Jenkins穿來的參數 自行時使用
ProjectBuildExecute(BuildTarget.Android);
}
public static void ProjectBuildExecute(BuildTarget target)
{
//Switch Platform
SwitchPlatform(target);
List<string> scenes = new List<string>();
foreach (UnityEditor.EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
{
if (scene.enabled)
{
if (System.IO.File.Exists(scene.path))
{
Debug.Log("Add Scene (" + scene.path + ")");
scenes.Add(scene.path);
}
}
}
BuildReport report = BuildPipeline.BuildPlayer(scenes.ToArray(), LOCATION_PATH_ANDROID, target, BuildOptions.None);
if (report.summary.result != BuildResult.Succeeded)
{
Debug.LogError("打包失败。(" + report.summary.ToString() + ")");
}
}
private static void SwitchPlatform(BuildTarget target)
{
if (EditorUserBuildSettings.activeBuildTarget != target)
{
if (target == BuildTarget.iOS)
{
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
}
if (target == BuildTarget.Android)
{
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);
}
}
}
}