使用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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容