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服务器上 ,会出现以下错误


发布评论