iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Software Development

Unity黑科技揭秘:30個專業遊戲開發者必知的開發技巧系列 第 7

Unity CICD - 程式的究極目的就是什麼都不用做

  • 分享至 

  • xImage
  •  

在遊戲開發和其他使用Unity引擎的項目中,持續集成和持續交付(CI/CD)是一個非常重要的流程。以下是一些常見的Unity CI/CD做法和工具:

1. 版本控制系統(VCS)

  • Git:大多數Unity項目使用Git來管理源代碼。常見的服務包括GitHub、GitLab和Bitbucket。

2. 持續集成(CI)服務

  • Jenkins:一個開源的自動化服務器,可以通過插件擴展來支持Unity構建。
  • GitHub Actions:直接集成在GitHub中的CI/CD工具,可以設置工作流來自動化構建和測試。
  • GitLab CI:GitLab內置的CI/CD工具,支持自定義管道來自動化Unity構建。
  • Azure DevOps:提供CI/CD服務,可以配置管道來自動化Unity項目的構建和部署。

3. 構建自動化

  • Unity Build Pipeline:Unity提供了自己的構建管道,可以通過命令行參數和腳本來自動化構建過程。
  • Custom Build Scripts:使用C#腳本自動化構建過程,這些腳本可以與上述CI工具集成。

4. 測試自動化

  • Unity Test Framework:Unity提供了一個內置的測試框架,可以用來編寫編輯器測試和播放模式測試。
  • Automated Testing:將測試腳本集成到CI管道中,以確保每次構建都經過測試。

5. 部署和發佈

  • App Stores:自動化部署到各大應用商店(如Google Play、Apple App Store)。
  • Cloud Services:使用雲服務(如AWS、Azure)來部署和運行服務器端的Unity項目。

6. 其他工具

  • Plastic SCM:專為遊戲開發設計的版本控制系統,與Unity有良好的集成。
  • Unity Cloud Build:Unity官方提供的構建服務,可以自動化構建和測試。

示例工作流

一個典型的Unity CI/CD工作流可能包括以下步驟:

  1. 代碼提交:開發者將代碼提交到Git倉庫。
  2. 觸發CI管道:CI服務檢測到新的提交,觸發構建管道。
  3. 構建項目:使用Unity命令行工具進行構建。
  4. 運行測試:運行自動化測試,確保代碼質量。
  5. 部署:將構建結果部署到測試環境或生產環境。

這樣的工作流可以確保每次代碼變更都經過構建和測試,減少手動操作,提升開發效率和質量。


當然,以下是一個使用GitLab CI/CD來自動化Unity項目構建和測試的示例。

1. 設置GitLab CI/CD工作流

首先,在你的Unity項目根目錄下創建一個名為.gitlab-ci.yml的文件,內容如下:

stages:
  - build
  - test

variables:
  UNITY_VERSION: "2021.3.0f1"

before_script:
  - apt-get update
  - apt-get install -y wget
  - wget https://beta.unity3d.com/download/$(wget -qO- https://unity3d.com/get-unity/download/archive | grep -oP 'href="https://beta.unity3d.com/download/[a-z0-9]+/UnitySetup-[0-9a-z.]+.sh"' | grep $UNITY_VERSION | head -n 1 | cut -d'"' -f2) -O UnitySetup.sh
  - chmod +x UnitySetup.sh
  - ./UnitySetup.sh --unattended --install-location=/opt/unity

build:
  stage: build
  script:
    - /opt/unity/Editor/Unity -quit -batchmode -nographics -projectPath . -buildTarget StandaloneWindows64 -buildPath Build/Windows
  artifacts:
    paths:
      - Build/Windows

test:
  stage: test
  script:
    - /opt/unity/Editor/Unity -quit -batchmode -nographics -projectPath . -runTests -testResults Results.xml -testPlatform PlayMode
  artifacts:
    when: always
    paths:
      - Results.xml

2. 設置GitLab CI/CD變量

在GitLab倉庫中,前往Settings -> CI / CD -> Variables,添加以下變量:

  • UNITY_SERIAL:你的Unity序列號
  • UNITY_EMAIL:你的Unity帳號郵箱
  • UNITY_PASSWORD:你的Unity帳號密碼

3. 工作流解釋

  • stages: 定義了工作流的階段,這裡有兩個階段:buildtest
  • variables: 定義了Unity版本的變量。
  • before_script: 在每個任務執行前運行的腳本,這裡用來安裝Unity編輯器。
  • build:
    • stage: 指定這個任務屬於build階段。
    • script: 使用Unity命令行工具來構建項目,這裡構建的是Windows平台的可執行文件。
    • artifacts: 定義了構建產物,這裡將構建結果保存到Build/Windows目錄。
  • test:
    • stage: 指定這個任務屬於test階段。
    • script: 使用Unity命令行工具來運行測試,並將結果輸出到Results.xml文件中。
    • artifacts: 定義了測試結果的產物,這裡將測試結果保存到Results.xml文件中,即使測試失敗也會保存。

4. 運行工作流

當你向GitLab倉庫推送代碼或提交合併請求時,這個工作流會自動運行,進行以下操作:

  1. 安裝Unity編輯器。
  2. 構建項目。
  3. 運行測試。
  4. 保存構建結果和測試結果。

這是一個基本的GitLab CI/CD工作流示例,你可以根據需要進一步擴展和自定義。


當然,以下是如何使用GitLab CI/CD將Unity項目自動部署到目標平台(如iOS和Android)的示例。這個流程包括構建和部署的步驟。

1. 設置GitLab CI/CD工作流

在你的Unity項目根目錄下創建或更新.gitlab-ci.yml文件,內容如下:

stages:
  - build
  - deploy

variables:
  UNITY_VERSION: "2021.3.0f1"
  ANDROID_SDK_ROOT: "/opt/android-sdk"
  ANDROID_HOME: "/opt/android-sdk"
  ANDROID_NDK_HOME: "/opt/android-ndk"

before_script:
  - apt-get update
  - apt-get install -y wget unzip

  # Install Unity
  - wget https://beta.unity3d.com/download/$(wget -qO- https://unity3d.com/get-unity/download/archive | grep -oP 'href="https://beta.unity3d.com/download/[a-z0-9]+/UnitySetup-[0-9a-z.]+.sh"' | grep $UNITY_VERSION | head -n 1 | cut -d'"' -f2) -O UnitySetup.sh
  - chmod +x UnitySetup.sh
  - ./UnitySetup.sh --unattended --install-location=/opt/unity

  # Install Android SDK and NDK
  - wget https://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip -O commandlinetools.zip
  - unzip commandlinetools.zip -d /opt/android-sdk
  - yes | /opt/android-sdk/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT --licenses
  - /opt/android-sdk/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platform-tools" "platforms;android-30" "build-tools;30.0.3" "ndk-bundle"

build_android:
  stage: build
  script:
    - /opt/unity/Editor/Unity -quit -batchmode -nographics -projectPath . -buildTarget Android -customBuildTarget Android -customBuildPath Build/Android/app.apk
  artifacts:
    paths:
      - Build/Android/app.apk

deploy_android:
  stage: deploy
  script:
    - echo "Deploying Android APK..."
    # 在這裡添加部署步驟,例如上傳到Firebase App Distribution或Google Play Console

build_ios:
  stage: build
  script:
    - /opt/unity/Editor/Unity -quit -batchmode -nographics -projectPath . -buildTarget iOS -customBuildTarget iOS -customBuildPath Build/iOS
  artifacts:
    paths:
      - Build/iOS

deploy_ios:
  stage: deploy
  script:
    - echo "Deploying iOS build..."
    # 在這裡添加部署步驟,例如上傳到TestFlight或App Store Connect

2. 設置GitLab CI/CD變量

在GitLab倉庫中,前往Settings -> CI / CD -> Variables,添加以下變量:

  • UNITY_SERIAL:你的Unity序列號
  • UNITY_EMAIL:你的Unity帳號郵箱
  • UNITY_PASSWORD:你的Unity帳號密碼

3. 工作流解釋

  • stages: 定義了工作流的階段,這裡有四個階段:builddeploy,分別針對Android和iOS。
  • variables: 定義了一些環境變量,包括Unity版本和Android SDK/NDK路徑。
  • before_script: 在每個任務執行前運行的腳本,這裡用來安裝Unity編輯器和Android SDK/NDK。
  • build_android:
    • stage: 指定這個任務屬於build階段。
    • script: 使用Unity命令行工具來構建Android APK。
    • artifacts: 定義了構建產物,這裡將構建的APK保存到Build/Android目錄。
  • deploy_android:
    • stage: 指定這個任務屬於deploy階段。
    • script: 部署步驟(這裡可以添加上傳到Firebase App Distribution或Google Play Console的腳本)。
  • build_ios:
    • stage: 指定這個任務屬於build階段。
    • script: 使用Unity命令行工具來構建iOS項目。
    • artifacts: 定義了構建產物,這裡將構建的iOS項目保存到Build/iOS目錄。
  • deploy_ios:
    • stage: 指定這個任務屬於deploy階段。
    • script: 部署步驟(這裡可以添加上傳到TestFlight或App Store Connect的腳本)。

4. 運行工作流

當你向GitLab倉庫推送代碼或提交合併請求時,這個工作流會自動運行,進行以下操作:

  1. 安裝Unity編輯器和Android SDK/NDK。
  2. 構建Android APK和iOS項目。
  3. 部署構建產物到指定的平台。

這是一個基本的GitLab CI/CD工作流示例,你可以根據需要進一步擴展和自定義,包括添加實際的部署步驟。


上一篇
Unity Unit Test - 你就是不寫測試,才會沒時間!
下一篇
Unity Text Mesh Pro 最全攻略 - 中文字,Scroll,動畫,寫公式
系列文
Unity黑科技揭秘:30個專業遊戲開發者必知的開發技巧25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言