使用 GitLab 进行多平台开发
一、总体架构与Runner规划
二、Runner 与平台矩阵设计
| 目标平台 | 推荐 Runner 主机 | 典型用途 | 备注 |
|---|---|---|---|
| JVM/Android | Linux | Gradle/Kotlin 编译、单元测试 | 易横向扩展,资源友好 |
| Web/JS/Wasm | Linux | Node/Yarn、Webpack、Wasm 构建 | 与 CI 缓存配合收益高 |
| iOS | macOS | Xcode 编译、签名、Archive | 苹果生态强制要求 |
| Windows 原生 | Windows | .NET、C++/MSBuild、WPF/UWP | 本机工具链依赖 |
| UE4/UE5 | Windows + macOS | Windows 构建、iOS 远程打包 | 可用 SSH 触发 macOS 打包 |
三、多平台 CI 示例模板
# .gitlab-ci.yml 骨架(可按需裁剪与扩展)
stages:
- validate
- build
- test
- package
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
CACHE_KEY_PREFIX: "gradle"
cache:
key: "$CACHE_KEY_PREFIX-${CI_COMMIT_REF_SLUG}"
paths:
- .gradle/caches/
- .gradle/wrapper/
- kotlin-js-store/
- node_modules/
# 1) 依赖校验(示例:Kotlin 多平台)
dependency-validation:
stage: validate
image: openjdk:11
script:
- ./gradlew --write-verification-metadata sha256,md5 resolveDependencies
- git diff --exit-code gradle/verification-metadata.xml
# 2) 多平台并行构建矩阵
build:
stage: build
parallel:
matrix:
- TARGET: [jvm, js, wasm]
script:
- |
case "$TARGET" in
jvm) ./gradlew jvmJar ;;
js) ./gradlew jsBrowserProductionWebpack ;;
wasm) ./gradlew wasmJsBrowserProductionWebpack ;;
esac
artifacts:
paths:
- libraries/*/build/libs/*.jar
- libraries/*/js/build/distributions/
- libraries/*/wasmJs/build/distributions/
# 3) 测试(示例:按平台拆分)
test-jvm:
stage: test
script: ./gradlew test
needs: [build]
# 4) 打包示例:iOS(必须在 macOS)
package-ios:
stage: package
tags: [macos]
script:
- xcodebuild -workspace YourApp.xcworkspace -scheme YourApp -sdk iphoneos -configuration Release archive -archivePath build/YourApp.xcarchive
- xcodebuild -exportArchive -archivePath build/YourApp.xcarchive -exportPath build/ios -exportOptionsPlist exportOptions.plist
artifacts:
paths:
- build/ios/*.ipa
expire_in: 30 days
# 5) 可选:UE 项目 iOS 远程打包(Windows 构建机通过 SSH 触发 macOS Runner)
# 在 Windows Runner 上:
ue-build-ios-remote:
stage: package
tags: [windows]
script:
- ssh $MACOS_RUNNER_USER@$MACOS_RUNNER_HOST "cd $PROJECT_DIR && $UE_PATH/Engine/Binaries/DotNET/UnrealBuildTool.exe YourProject iOS Development"
- ssh $MACOS_RUNNER_USER@$MACOS_RUNNER_HOST "cd $PROJECT_DIR && xcodebuild -workspace YourProject.xcworkspace -scheme YourProject -sdk iphoneos -configuration Release archive -archivePath build/YourProject.xcarchive"
- ssh $MACOS_RUNNER_USER@$MACOS_RUNNER_HOST "xcodebuild -exportArchive -archivePath build/YourProject.xcarchive -exportPath build/ios -exportOptionsPlist exportOptions.plist"
artifacts:
paths:
- build/ios/*.ipa
四、安全与证书管理
五、协作与本地开发环境