如何通过Jenkins任务在构建时为iOS多Target注入Google Services配置
核心思路
通过Jenkins的凭据管理安全存储各个Target的配置文件,构建时根据目标Target动态复制到项目对应路径,全程不将plist文件提交到代码仓库。
具体步骤
在Jenkins中安全存储各Target的plist文件
进入Jenkins的「凭据管理」,选择添加「秘密文件」类型的凭据,分别上传每个Target对应的google-services.plist,并命名为TargetA-google-services.plist、TargetB-google-services.plist、TargetC-google-services.plist,方便后续识别。配置Jenkins构建任务的凭据绑定
打开你的Jenkins构建任务配置页,找到「绑定凭据」区域,添加3个「秘密文件」绑定:- 将
TargetA-google-services.plist映射为环境变量TARGET_A_PLIST - 将
TargetB-google-services.plist映射为环境变量TARGET_B_PLIST - 将
TargetC-google-services.plist映射为环境变量TARGET_C_PLIST
这样构建时,这些plist文件会被临时存放在对应环境变量指向的路径中。
- 将
添加参数化构建(可选但推荐)
在构建任务配置中开启「参数化构建过程」,添加一个字符串参数BUILD_TARGET,默认值可以设为其中一个Target(比如TargetA),这样每次构建前可以选择要编译的目标Target。编写Shell脚本动态复制配置文件
在构建任务的「执行Shell」步骤中,添加以下脚本,根据当前构建的Target将对应的plist文件复制到项目的正确位置(请根据你的项目目录结构调整路径):# 替换为你项目中各Target存放google-services.plist的实际路径 TARGET_A_PATH="./Targets/TargetA/Resources/google-services.plist" TARGET_B_PATH="./Targets/TargetB/Resources/google-services.plist" TARGET_C_PATH="./Targets/TargetC/Resources/google-services.plist" case "$BUILD_TARGET" in "TargetA") cp "$TARGET_A_PLIST" "$TARGET_A_PATH" echo "Copied TargetA's google-services.plist to $TARGET_A_PATH" ;; "TargetB") cp "$TARGET_B_PLIST" "$TARGET_B_PATH" echo "Copied TargetB's google-services.plist to $TARGET_B_PATH" ;; "TargetC") cp "$TARGET_C_PLIST" "$TARGET_C_PATH" echo "Copied TargetC's google-services.plist to $TARGET_C_PATH" ;; *) echo "Error: Unknown target $BUILD_TARGET" exit 1 ;; esac确保.gitignore排除配置文件
在项目根目录的.gitignore文件中添加以下规则,防止所有google-services.plist被提交到仓库:*/google-services.plist构建后清理临时文件(可选)
如果需要避免临时文件留在Jenkins工作目录影响后续构建,可以在「后期构建步骤」中添加Shell脚本清理:rm -f "./Targets/TargetA/Resources/google-services.plist" rm -f "./Targets/TargetB/Resources/google-services.plist" rm -f "./Targets/TargetC/Resources/google-services.plist"
内容的提问来源于stack exchange,提问作者dubbeat

