top of page
搜尋

CocosCreator 熱更新 使用Gitlab CI/CD自動產生Manifest並部署到Amazon Ec-2遠程伺服器

  • 作家相片: 承鑫 郭
    承鑫 郭
  • 2020年8月20日
  • 讀畢需時 2 分鐘

  • 前言

當版本發布後,熱更新就會變得很頻繁且步驟幾乎是一樣的,就是資源或程式碼更新完後在cocos按建構 => version_generator.js產Manifest => 部署到遠程伺服器,如果這些都要請人力手動來做的話維護成本就會變高,且還有可能操作不當造成不必要的錯誤,所以就把能自動化的東西交給Gitlab的CI/CD做,達到自動化佈署。

PS.目前建構環境還是必須在Windows or Mac且CocosCreator有版本差異,所以建構部分還是先在CocosCreator執行,其他部分走CI/CD流程。

  • 環境準備

1.Amazon Ec2

2.Docker化的Gitlab Runner

3.註冊GitLab Runner

4.SSH設定

如果要使用scp、rsync,或是SSH連線都需要先創建一組SSH Key Pair

本專案使用的是ED25519 SSH 密鑰,他相比RSA有更高效能,更安全


Step1.產SSH密鑰


 ssh-keygen -t ed25519 -C "<comment>"

-C 是個標記,通常可使用Email當作標記。

產出流程如下:

記得passphrase必須設定為空,因為自動化沒辦法再使用手動輸入密碼去驗證。


Step2.將密鑰加到GitLab環境變數

點選專案的Settings => CI/CD => Varibles

Key的變數名稱可以自己定義:預設可使用 SSH_PRIVATE_KEY

Key的值是剛剛產出來的"密鑰"。可使用cat或pbcopy指令

Ex.


cat /Users/imac/.ssh/yourkeyname 
pbcopy  < /Users/imac/.ssh/yourkeyname 

Protected必須設定為x,不然CI/CD會抓不到Key

PS.記得把上下列的

------BEGIN OPENSSH PRIVATE KEY-----

-----END OPENSSH PRIVATE KEY-----

一併複製進去,不然CI/CD過程時,會因為被要求passphrase而失敗!就算你沒有設定passphrase也一樣!


Step3.為遠程伺服器加上SSH公鑰作為認證

將剛剛產出的"公鑰"放到遠程伺服器上的~/.ssh/authorized_keys


mkdir -p ~/.ssh
cat yourkeyname >> ~/.ssh/authorized_keys

關閉手動使用密碼認證並打開公鑰驗證避免自動化流程卡住


sudo vim /etc/ssh/sshd_config

PermitRootLogin no

UsePAM no

PasswordAuthentication no

RSAAuthentication yes

PubkeyAuthentication yes

重啟SSH Service


sudo systemctl restart sshd.service

問題排解:

  • CI/CD流程

本專案使用的是最新版Node.js的Docker容器,方便我們做Manifest產出。

當Docker pull一個最新的Node.js環境後,會將整個專案git pull下來,所以當前的路徑就是專案目錄,如果目錄上有version_generator.js可以在.gitlab-ci.yml下


node version_generator.js -v 5.0 -u http://0.0.0.0:7777/versions/ver_3_0/ -s build/jsb-link -d build/jsb-link

產出我們的project.manifest和version.manifest,接著要去ssh-add我們專案上的SSH密鑰,並將./ssh目錄權限做調整,詳細的解說請參考官方文檔。

最後再將我們的src,res,project.manifest和version.manifest經由scp複製到遠端服務器的FTP目錄下就大功告成囉!




build_job:
  image: node:10 
  script:
    - node version_generator.js -v 5.0 -u http://0.0.0.0:7777/versions/ver_3_0/ -s build/jsb-link -d build/jsb-link
    - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan ec2-user@0.0.0.0 >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts

    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    
    - echo "🚚 開始複製檔案.."
    - scp -r build/jsb-link/res ec2-user@0.0.0.0:/usr/share/html
    - scp -r build/jsb-link/src ec2-user@0.0.0.0:/usr/share/html
    - scp -r build/jsb-link/project.manifest ec2-user@0.0.0.0:/usr/share/html
    - scp -r build/jsb-link/version.manifest ec2-user@0.0.0.0:/usr/share/html
    - echo "🚴‍♂️ 完成部署

  • 結語

目前針對CocosCreator的部署提供一個自動化的方向,當專案建構完成後修改.gitlab-ci.yml的遠端版本號,一併commit上git,Gitlab就會觸發Runner啟動Docker化的Nodejs環境來產出Manifest檔並把熱更新資源更新到遠程伺服器的熱更新路徑上,未來希望CocosCreator可以支持在Docker內做“建構”的動作,這樣我們客戶端程式修改完畢後就可以直接Commit到GitLab做完全自動化測試/部署。 參考資料


 
 
 

Comments


文章: Blog2_Post

訂閱表單

感謝您提交以上資訊!

  • Facebook
  • Twitter
  • LinkedIn

©2020 by CCGamer. Proudly created with Wix.com

bottom of page