使用Jenkins实现CocosCreator的自动化构建和发布

一、安装Jenkins

(1)简介

Jenkins是个独立的开源软件项目,它是基于Java开发的一种持续集成工具,可用于实现各种任务的自动化,如构建,测试和部署等。
项目的日常开发中,编译构建是每天频繁要做的事情,如果开发的是H5游戏,还需要把构建后的版本上传到Web服务器,这都会占用或中断程序员不少宝贵的编码时间。借助Jenkins的自动化管理,任何人通过浏览器就可以一键完成以上工作,这样程序员只要专注于编码就可以了。

(2)Jenkins特点

开源免费;
跨平台(支持所有的平台);
master/slave支持分布式的build;
web形式的可视化管理页面;
安装配置超级简单;
功能强大(已有1200多个插件);

(3)安装Jenkins

首先我们需要一台机器作为构建机,在它上面安装JenkinsJenkins基于Java开发,跨平台支持非常好,几乎是所有平台都能运行Jenkins。不过对于CocosCreator项目来说,就只能选择Windows或Mac机器了,本文主要以win10系统为例。

1、到Jenkins官网(https://jenkins.io/)下载msi格式的Windows安装包,当前最新版本是2.277.1,正常安装;
2、安装完成后,打开浏览器输入地址:http://localhost:8080/jenkins,按页面提示从本地复制密码并输入;
3、安装默认推荐的插件;
4、创建第一个管理员用户。这是指Jenkins系统的管理员,因为Jenkins是个分布式平台,支持任意多个用户并行操作,不同用户有不同权限,所以在Jenkins第一次安装后需要立即创建一个管理员;
5、如果看到如下界面,代表Jenkins已经安装成功。

二、自动化脚本

本质上Jenkins是个可视化的Web管理工具,执行的各种任务其实都是通过命令完成的,我们要做什么任务,就为这个任务提供相应的命令。例如,Windows平台批处理命令

所以我们首先学会使用命令行来构建CocosCreator项目,之后才能在Jenkins中实现一键自动化构建和发布。

(1)命令行构建CocosCreator

CocosCreator.exe本身支持命令行,简单使用有以下参数就够了。

  • –path - 指定项目路径
  • –build - 指定构建项目使用的参数
  • –compile - 指定编译项目使用的参数
    --build--compile后如果没有指定参数,则会使用Creator 构建面板当前的平台、模板等设置来作为默认参数。如果指定了其他参数设置,则会使用指定的参数来覆盖默认参数。

此次我们使用默认配置即可,所以在命令行中进入我们需要构建的Creator工程目录,输入命令:

C:\CocosCreator\CocosCreator.exe --path . --build

即可在当前路径使用默认参数完成构建。

(2)命令行发布CocosCreator项目

构建完成后,如果是支持浏览器的H5游戏,我们还需要把构建后的版本上传到Web服务器,完成发布。Windows上有个免费的远程文件传输工具pscp,支持命令行把指定文件或目录上传到远程服务器。pscp的参数含义如下:

  • -l 远程服务器的用户名
  • -pw 远程服务器的密码
  • -r 拷贝整个目录
    如果Creator构建使用的是web-mobile方式,则构建后的版本目录默认是 build\web-mobile\,假设远程服务器已配置好 nginx来提供Web服务,端口是8000,IP地址是192.168.1.100,存放目录是 /usr/share/nginx/Hello,登录用户名是root,密码是123456,那么输入命令:
pscp -l root -pw 123456 -r .\build\web-mobile\ 192.168.1.100:/usr/share/nginx/Hello

这样一个命令就把构建后的版本上传到了远程服务器,之后在浏览器中打开 192.168.1.100:8000,即可运行游戏的H5版本了。

(3)批处理

我们把这2个命令组合起来形成一个批处理文件,放在工程目录下,以后只要一个双击就完成了CocosCreator项目的构建和发布,非常方便。

echo "start build"
C:\CocosCreator\CocosCreator.exe --path . --build
echo "end build"
echo "start copy"
pscp -l root -pw 123456 -r .\build\web-mobile\ 192.168.1.100:/usr/share/nginx/Hello
echo "end copy"
@pause

三、第一个Jenkins任务

上面介绍了如何编写Creator项目构建和发布的Windows批处理,接下来我们将要在Jenkins中部署该任务,以实现真正的自动化。步骤如下:

(1)创建Creator项目

首先用Creator新建一个HelloWorld项目,并通过Creator构建面板中试着构建一遍,确认工程本身没有问题;

(2)准备远程传输文件工具

为保持目录整洁,在Creator工程目录下新建一个tools目录,把pscp.exe放到该目录下(后面远程传输文件会用到),形成的目录结构如下:

(3)创建Jenkins任务

登录Jenkins,新建一个名称为“HelloWorld”的任务,任务类型选择“自由风格的软件项目”,点击确定,就创建好了一个任务。在该任务视图中点击左侧的“配置”,按如下配置:

  • General:可以不填,全部留空即可;
  • 源码管理:选择“无”;
  • 构建触发器:全部不填;
  • 构建:增加一个“Windows批处理命令”,填写上篇文章介绍过的命令,如下:
e:
cd e:\dev\CocosCreator\HelloWorld\tools
c:\CocosCreator\CocosCreator.exe --path ..\ --build
pscp -l root -pw 123456 -r ..\build\web-mobile\ 192.168.1.100:/usr/share/nginx/hello

注:此处我的Creator工程路径是 e:\dev\CocosCreator\HelloWorld,CocosCreator安装目录是:c:\CocosCreator\CocosCreator.exe,构建后版本上传到web服务器的目标路径是/usr/share/nginx/hello,读者可根据情况自行调整。

构建后操作:留空即可;

(4)开始构建

保存上述配置后,回到任务视图,点击左侧的“立即构建”,即开始执行任务,也就是开始调用Creator进行HelloWorld工程的构建。


提示:如果是第一次使用Jenkins构建Creator项目,通常会失败,在进行到如下这一步停止,一直转圈:

Load ~/.CocosCreator/settings.json
checking language setting...

原因是Jenkins服务调用了Creator进行构建,而默认情况下Jenkins服务的权限不够,所以我们还需要给Jenkins服务提高权限。
打开Win10的“服务”面板,找到Jenkins服务,我的做法是把登录账户设为当前管理员账户。对于这个问题,Jenkins官方文档也给出了答案,如下图:

再次构建,就应该能顺利完成了,如果Jenkins成功执行了任务,将会在最后一行输出:

Finished: SUCCESS

这样,通过Jenkins的开放式Web页面,任何人(例如:研发团队里的策划、美术)都可以一键完成Creator项目的构建和发布,程序员可以安心地写代码了。

四、增加Git管理

上面讲述了Jenkins如何一键构建和发布Creator项目,不过构建的都是本地代码。本篇文章讲述如何通过Jenkins中结合代码Git管理,使本地提交代码抓取最新代码推送代码Git服务器等一套流程全跑通,并自动使用Git仓库中的最新代码进行CocosCreator的构建和发布。本文使用的环境为:本机Win10系统+本机Jenkins+远程GitLab仓库,步骤如下:

(1)Jenkins安装Git和GitLab插件

打开浏览器 -> 登录Jenkins -> 系统管理 -> 管理插件,切换到“可选插件”,搜索"git"关键字,找到“GitLab Plugin”“Git Plugin”,点击下方的“直接安装”。如果在“可选插件”里没有搜到,可能默认你已经安装了,可以在“已安装”里查看。如下所示:

等待安装完成。

(2)配置GitLab插件

要让Jenkins连接上GitLab仓库,通常需要Git密钥token
登录GitLab -> 点击“setting”——“Account”,复制Private token备用,如下所示:

打开浏览器 -> 登录Jenkins -> 系统管理 -> 系统设置,点击配置下拉框,点击Gitlab选项,如下所示:

Gitlab弹出框里,kind选择GitLab API Token,将先前复制的Private token粘贴到API token输入框中,然后点击Add,即配置好了。如下所示:

选择刚刚新建的Credentials,并根据自己情况填完整Connection nameGitLab host URL。设置完后,还要测试一下能否连接成功,点击test connection,要看到返回Success才行,如下所示:

然后点击页面底下的apply,再点击save,保存GitLab配置。

(3)配置Git插件

打开浏览器 -> 登录Jenkins -> 系统管理 -> 系统设置,点击配置下拉框,选择Git plugin选项,设置Git插件的全局配置,如下所示:

然后点击apply——save,保存Git配置。

(4)编写脚本

好了,现在把该配置的都配好了,Jenkins已经准备好了连接Git仓库,还剩最后一步,就是给Jenkins任务编写脚本。假设Creator工程路径是e:\dev\CocosCreator\HelloWorldgit分支masterpscp软件tools子目录下,按照 commit -> pull -> pushGit流程,脚本命令如下:

e:
cd e:\dev\CocosCreator\HelloWorld
git add .
git commit -a -m "commit resource from jenkins"
git pull origin master
git push origin master
C:\CocosCreator\CocosCreator.exe --path .\ --build
cd tools
pscp -l root -pw 123456 -r ..\build\web-mobile\ 192.168.1.100:/usr/share/nginx/Hello

如下图所示:


现在,只要本地代码有修改Git仓库里有新代码提交,直接运行这个任务,就自动完成了所有的构建和发布工作,并把最新代码提交到Git仓库

五、增加SSH远程操作

前面讲述了如何实现CocosCreator的自动化构建和发布,不过使用次数多了会发现一个问题:就是如果我们在Creator的构建选项中选定了MD5,则每次构建都会生成新的文件名,那么每一次上传新版本到服务器时,因为新文件不会覆盖旧文件,就会导致发布目录下的文件越来越多。所以我们还希望在每一次上传新版本前把旧文件删除掉,这就需要Jenkins能远程登录到服务器,并执行删除命令。

要让Jenkins支持远程登录需要安装SSH插件,并在Jenkins上设置好Credentials,然后在相应的Jenkins任务中使用该Credentials即可。步骤如下:

(1)新建Credentials

Jenkins界面,依次点击: Credentials -> System -> Add domain
Domain Name: 填写你的服务器地址,如:192.168.1.100;
Description: 随便写一点描述,如 This is the Credential for CocosCreator;
如下图所示:

点击 ok,再点击 “adding some credentials?”进入页面后,可以选择 Username with password或者 SSH Username with private key, 根据自己情况选择,为简单起见,这里我们选择 Username with password
Username: 远程登录的用户名,如:root
Password: 远程登录的密码,如:123456
ID: 空
Description: 空
如下图所示:

点击 ok,Credential就创建好了。

(2)SSH插件配置

再进入Jenkins系统管理 -> 系统设置,左上"配置"下拉菜单选择 ssh remote hosts,增加一个remote host,选择使用刚才创建好的 Credential,如下图所示:

(3)Jenkins任务配置

Jenkins任务配置的构建,选择增加“Execute shell script on remote host using ssh”,在SSH site选择使用刚才新建好的SSH site,并编写删除操作的shell命令:

rm -fr /usr/share/nginx/Hello/*

如下图所示:


(4)执行命令

一切都准备就绪,为了让 Creator构建 -> 删除旧文件 -> 上传新文件 按顺序执行,我们再把前面所用过的命令拆分为3部分,这样Jenkins就会按顺序执行了。

六、增加用户权限管理

随着Jenkins的使用深入,会发现需要给不同的用户配置不同的使用权限,虽然Jenkins自带用户权限管理,但比较简单,不支持用户组和项目的划分,因此需要第三方插件来实现更精细的权限管理,使用比较广泛的是Role Strategy Plugin插件,可以满足所有关于用户和权限的管理需求。官网:https://wiki.jenkins.io/pages/viewpage.action?pageId=57182927

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容