一、安裝Jenkins
(1)簡介
Jenkins
是個獨立的開源軟件項目,它是基于Java開發的一種持續集成工具,可用于實現各種任務的自動化,如構建,測試和部署等。
項目的日常開發中,編譯構建是每天頻繁要做的事情,如果開發的是H5游戲,還需要把構建后的版本上傳到Web服務器
,這都會占用或中斷程序員不少寶貴的編碼時間。借助Jenkins
的自動化管理,任何人通過瀏覽器就可以一鍵完成以上工作,這樣程序員只要專注于編碼就可以了。
(2)Jenkins特點
開源免費;
跨平臺(支持所有的平臺);
master/slave
支持分布式的build
;
web形式的可視化管理頁面;
安裝配置超級簡單;
功能強大(已有1200多個插件);
(3)安裝Jenkins
首先我們需要一臺機器作為構建機,在它上面安裝Jenkins
。Jenkins
基于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 name
和 GitLab 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\HelloWorld
,git分支
是master
,pscp軟件
在tools子目錄
下,按照 commit
-> pull
-> push
的Git流程
,腳本命令如下:
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