2023年11月26日发(作者:)

Jenkins基于unity的⾃动化打包

Jenkins的使⽤

brew 安装jenkins 时可能根据需要修改⼯作⽬录.

修改⼯作⽬录的步骤如下:

⼀,安装完成后千万不要打开浏览器。

⼆,

打开控制台窗⼝输⼊ sudo vi /etc/profile

三,这⾥需要注意的是这个⽂件在我这边的环境下默认为只读⽂件,可使⽤下⾯的命令修改其⽂件权限: sudo chmod 775 /etc/prifile

四,修改成功后再使⽤第⼀条指令打开,在⽂件的最后添加下⾯内容: export JENKINS_HOME=(要修改的路径)

然后,按ESC键,退出到插⼊模式,在按:号键+x 命令回车 即可保存⽂件

五,执⾏ source /etc/profile 命令。执⾏完成重启系统,再打开jenkins就能看到其主⽬录已修改成功、

这⾥主要介绍⼀下jenkins的基本使⽤以及通过C#去调⽤jenkins API 在unity上进⾏远程操作jiekins

⼀,登陆Jenkins

1. 打开浏览器,访问打包机IP的8080端⼝,账号密码后期可以分配⽣成,公⽤admin,u3d99

⼆,创建新的⼯程

三,Jenkins的基本配置

在源码管理⾥⾯配置好资源的地址(svn地址或git地址),设定好本地保存的⽂件夹,然后根据需要设置好checkout⽅式

SVN配置 checkout会有多个选项

{

取消勾选防站点请求。

我这⾥使⽤的⽐较暴⼒的⽅式,选的任何⽤户可以使⽤任何事,也可以根据需要选择下⾯的安全设置.设置此权限的话,访问jenkins页

⾯就不需要登录了,后⾯⽤api访问jenkins时就不⽤添加认证。

也可以选择登录⽤户可以做任何事情,此选择需要登录才可以使⽤,⽤api访问jenkins时需要添加Basic认证才可以访问成功

第⼆步,通过http请求特定的jenkins api 进⾏请求

下⾯例举部分部分jenkins api 地址

Xml ⽂件格式类似这个样⼦,创建新的job 时,修改⼀下xml⾥⾯的参数,然后保存在本地。然后请jenkinsUrl+ "/createItem?name="

+jobName 这个地址,将本地的xml⽂件传输过去。

调⽤下⾯的⽅法即可: 参数 filePath 为xml⽂件的路径

⾃⼰写的:(此⽅法 上传的⽂件 的格式必须为 UTF-8⽆BOM格式)

privatestaticstringPostHttp2(string url, string filePath)

{

stringresponseContent;

varmemStream = newMemoryStream();

varwebRequest = (HttpWebRequest)WebRequest.Create(url);

varfileStream = newFileStream(filePath, FileMode.Open,FileAccess.Read);

// 设置属性

= "POST";

t = 300000;

tType = "application/xml;charset=UTF-8";

ive = true;

ent = "Test";

= "gzip,deflate";

CredentialCachemycache = new CredentialCache();

(new Uri(jenkinsUrl),"Basic", new NetworkCredential(username, password));

tials = mycache;

("Authorization", "Basic " +64String(new ASCIIEncoding().GetBytes(username

+ ":" +password)));

// 写⼊⽂件

varbuffer = newbyte[1024];

intbytesRead; // =0

while((bytesRead = (buffer, 0, )) != 0)

{

(buffer, 0,bytesRead);

}

tLength =;

try

{

varrequestStream = uestStream();

on = 0;

vartempBuffer = newbyte[];

(tempBuffer, 0,);

();

(tempBuffer, 0,);

();

varhttpWebResponse = (HttpWebResponse)ponse();

using (varhttpStreamReader =

newStreamReader(ponseStream(),Encoding.GetEncoding("utf-8")))

{

省略

}

}

使⽤BestHttp插件的⽅法是如下:(此⽅法 上传的⽂件 的格式必须为 UTF-8格式)

staticvoidPostHttpJenkins(stringurl,string filePath)

{

var request = newHTTPRequest(newUri(url), HTTPMethods.Post,(req, resp) =>

{

HttpPostResponseCode(Code);

Debug.Log(Text);

});

tials = newCredentials(AuthenticationTypes.Basic, username, password);

var fileStream = newFileStream(filePath,FileMode.Open);

var buffer = newbyte[];

der("Content-Type","application/xml; charset=UTF-8");

(buffer, 0,);

a = buffer;

();

();

}

3更新Jenkinsjob配置

url= jenkinsUrl+ "/job/" + jobName + "/"

更新配置时,与创建job类似,同样调⽤上⾯的PostHttp2 ⽅法,将此url与修改的xml⽂件的地址传过去即可

4 获取jenkins Job配置

url=jenkinsUrl + "/job/" + jobName + "/"

⽅法⼀:

publicstaticstring GetHttp(string url) {

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

tType = "application/json";

= "GET";

t = 20000;

CredentialCache mycache = newCredentialCache();

(newUri(jenkinsUrl),"Basic",newNetworkCredential(username, password));

tials = mycache;

("Authorization","Basic "+

Convert.ToBase64String(newASCIIEncoding().GetBytes(username + ":" + password)));

HttpWebResponse httpWebResponse = (HttpWebResponse)ponse();

StreamReader streamReader = newStreamReader(ponseStream());

string responseContent = End();

();

();

return responseContent; }

⽅法⼆:使⽤bestHTTP

staticvoidGetHttpJenkins(stringurl)

{

var request = newHTTPRequest(newUri(url), HTTPMethods.Get,(req, resp) =>

{

HttpPostResponseCode(Code);

});

tials = newCredentials(AuthenticationTypes.Basic, username, password);

();

}

5,BuildJenkins⼯程

有参数地址:url= jenkinsUrl + "/job/" + jobName + "/buildWithParameters"

⽆参数地址: url= jenkinsUrl + "/job/" + jobName + "/build"

下⾯是有参数的调⽤⽅法(使⽤bestHTTP插件)

publicstaticvoidBuildJenkins()

{

stringurlString = jenkinsUrl + "/job/" + jobName + "/buildWithParameters";

FiltrationPath();

varrequest = newHTTPRequest(newUri(urlString),HTTPMethods.Post, (req, resp) =>

{

Debug.Log(Code);

if(Code != 401)

Debug.Log("Authenticated");

else

Debug.Log("NOTAuthenticated");

Debug.Log(Text);

});

//添加Basic认证

tials = newCredentials(AuthenticationTypes.Basic, username,password);

ld("Plantform",platformName);

ld("AppID",appID);

ld("VersionNumber",versionNumber);

ld("IPAddress",ipAddress);

ld("isHotFix",isHotFix?"true":"false");

ld("path",content);

();

}

注意这⾥有个⼤坑如果本⾝的⼯程是带有参数的,请求的是⽆参数地址的时候,会返回错误码 400

另外:jenkin是有账号密码的,所以http请求是需要Credentials认证才能进⾏访问。有参数的http 请求的数据形式为 form data 形

式。Form data格式上⾯的besthttp插件已经封装好了。

Build热更资源前需要先转换平台

6:关于请求jenkins 服务器返回的错误码

privatestaticvoid HttpPostResponseCode(int errorCode)

{

switch (errorCode)

{

case 400:Debug.LogError("传递的参数不正确");

break;

case 401:Debug.LogError("Not Authenticated");

break;

case 403:Debug.LogError("未添加basic认证");

break;

case 500:Debug.LogError("传递的⽂件格式不对,需要为UTF-8格式(上⾯PostHttp2⾥⾯需要为UTF-8 ⽆BOM 格式,具体原

因还不清楚)");

break;

}

}

Xml⽂件操作的坑

Xml Linq查询节点

var StringParameterDefinition = t("project")

.Element("properties")

.Element("tersDefinitionProperty")

.Element("parameterDefinitions")

.Element("rameterDefinition");

对xml⽂件进⾏操作时,version的版本要是1.0 ,不然操作会不成功。从jenkins⽹页上直接获取的的xml⽂件的version是1.1,所以操作

会报错误

发送改xml到jenkins服务器上 ,会出现以下错误