You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Gitlab CI+Flutter+Fastlane多环境配置:服务文件替换问题

Gitlab CI多环境下替换Flutter项目的Google Play服务配置文件

方案1:用Gitlab CI变量存储配置文件内容

  • 操作步骤:
    1. 进入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,记得勾选「保护变量」和「掩码变量」防止内容泄露。
    2. 在.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"
      

方案2:按环境分支存放配置文件,CI中复制替换

  • 操作步骤:
    1. 在项目根目录建configs文件夹,分别创建dev和staging子目录,放入对应环境的配置文件:
      configs/
        dev/
          google-services.json
          GoogleService-Info.plist
        staging/
          google-services.json
          GoogleService-Info.plist
      
    2. 在.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)$/'
      
    备注:如果分支名和环境名不匹配,可以在rules里通过variables: ENV_NAME: "staging"做映射。

方案3:结合Fastlane脚本处理环境配置

  • 操作步骤:
    1. 在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
      
    2. 在.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"
      

内容的提问来源于stack exchange,提问作者user4415205

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:42:54