基于Gitlab CI+Flutter+Fastlane多环境配置:服务文件替换问题
Gitlab CI多环境下替换Flutter项目的Google Play服务配置文件
方案1:用Gitlab CI变量存储配置文件内容
- 操作步骤:
- 进入Gitlab项目的「设置」→「CI/CD」→「变量」,给Dev和Staging环境分别添加变量:比如
DEV_GOOGLE_SERVICES_JSON(填入Dev环境的JSON文本内容)、STAGING_GOOGLE_SERVICES_JSON(填入Staging环境的);iOS同理添加DEV_GOOGLE_SERVICES_PLIST和STAGING_GOOGLE_SERVICES_PLIST,记得勾选「保护变量」和「掩码变量」防止内容泄露。 - 在
.gitlab-ci.yml里根据当前环境分支或触发变量,把对应变量内容写入目标文件:stages: - prepare - build prepare_config: stage: prepare script: # 替换Android的JSON文件 - | if [ "$CI_ENVIRONMENT_NAME" = "staging" ]; then echo "$STAGING_GOOGLE_SERVICES_JSON" > android/app/google-services.json else echo "$DEV_GOOGLE_SERVICES_JSON" > android/app/google-services.json fi # 替换iOS的Plist文件 - | if [ "$CI_ENVIRONMENT_NAME" = "staging" ]; then echo "$STAGING_GOOGLE_SERVICES_PLIST" > ios/Runner/GoogleService-Info.plist else echo "$DEV_GOOGLE_SERVICES_PLIST" > ios/Runner/GoogleService-Info.plist fi rules: - if: '$CI_COMMIT_BRANCH == "dev"' variables: CI_ENVIRONMENT_NAME: "dev" - if: '$CI_COMMIT_BRANCH == "staging"' variables: CI_ENVIRONMENT_NAME: "staging"
- 进入Gitlab项目的「设置」→「CI/CD」→「变量」,给Dev和Staging环境分别添加变量:比如
方案2:按环境分支存放配置文件,CI中复制替换
- 操作步骤:
- 在项目根目录建
configs文件夹,分别创建dev和staging子目录,放入对应环境的配置文件:configs/ dev/ google-services.json GoogleService-Info.plist staging/ google-services.json GoogleService-Info.plist - 在
.gitlab-ci.yml里根据当前分支,把对应环境的文件复制到项目指定路径:prepare_config: stage: prepare script: - cp configs/$CI_COMMIT_BRANCH/google-services.json android/app/ - cp configs/$CI_COMMIT_BRANCH/GoogleService-Info.plist ios/Runner/ rules: - if: '$CI_COMMIT_BRANCH =~ /^(dev|staging)$/'
variables: ENV_NAME: "staging"做映射。 - 在项目根目录建
方案3:结合Fastlane脚本处理环境配置
- 操作步骤:
- 在Fastfile里加一个处理配置的lane,根据传入的环境参数复制对应文件:
lane :setup_config do |options| env = options[:env] || "dev" # 替换Android配置 sh "cp configs/#{env}/google-services.json android/app/" # 替换iOS配置 sh "cp configs/#{env}/GoogleService-Info.plist ios/Runner/" end - 在
.gitlab-ci.yml里调用Fastlane的setup_config lane,传入当前环境:prepare_config: stage: prepare script: - bundle install - fastlane setup_config env:$CI_ENVIRONMENT_NAME rules: - if: '$CI_COMMIT_BRANCH == "dev"' variables: CI_ENVIRONMENT_NAME: "dev" - if: '$CI_COMMIT_BRANCH == "staging"' variables: CI_ENVIRONMENT_NAME: "staging"
- 在Fastfile里加一个处理配置的lane,根据传入的环境参数复制对应文件:
内容的提问来源于stack exchange,提问作者user4415205
相关产品推荐
相关产品推荐

