【问题标题】:Best practice for creating mobile(ios, android) app artifact for non-prod and prod environments为非 prod 和 prod 环境创建移动(ios、android)应用程序工件的最佳实践
【发布时间】:2020-05-27 06:36:50
【问题描述】:

我需要为多个环境创建一个移动应用程序工件。目标是在多个环境(dev、qa、preprod 和 prod)中推广相同的工件。移动工件使用从 env 更改为 env 的 saas url。请告诉我这样做的最佳做法。

目前,当工件通过 qa 时,我会为 pre-prod 创建另一个工件,最后为 prod 创建耗时且容易出错的工件。

我正在考虑创建一个活动的 env url 和发布版本 api。最佳做法是什么?

谢谢,

【问题讨论】:

  • 制作一个工件并通过 URL 传递实现
  • 还要补充一点,我正在使用 expo 来生成构建。我也在考虑上面评论中提到的相同思路,我唯一担心的是,这样我需要维护客户端版本和它应该指向的 URL,这可能是一个挑战。

标签: android ios jenkins mobile deployment


【解决方案1】:

我认为 android-flavors 会解决你的问题。

我看起来像下面这些例子。

  flavorDimensions "default"
    productFlavors{
        dev{
            applicationId "com.amitgupta.trust_app_android.dev"
        }
        staging{
            applicationId "com.amitgupta.trust_app_android.staging"
        }
        qa{
            applicationId "com.amitgupta.trust_app_android.qa"
        }
        production{
            applicationId "com.amitgupta.trust_app_android.production"
        }

    }

您还可以根据不同的环境使用不同的 URL。

flavorDimensions "version"
    productFlavors {
        QA {
            buildConfigField "String", "BASE_URL", '"http://qa.com/api/"'
        }
        production {
            buildConfigField "String", "BASE_URL", '"http://production.com/api/"'
        }
    }

请查看这些以了解其实现方式。

https://medium.com/@hsmnzaydn/configuration-product-flavors-and-build-variants-in-android-bb9e54d459af

https://www.journaldev.com/21533/android-build-types-product-flavors

对于 iOS: 您可以在 Xcode 中使用 SchemesBuild 配置。这是官方文档:https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/BasingBuildConfigurationsonConfigurationFiles.html

我希望这会有所帮助。

【讨论】:

  • 看起来和gradle很像,应用在应用商店发布时,我需要prod url在运行时,而不是构建时。我只想要一个工件用于我的所有环境,这样当 QA 通过构建时,我可以将相同的工件提升为 prod。同一个工件现在需要指向 prod 后端而不是 qa 后端。
  • hmm,在上述解决方案中,您可以使用一个工件,即一个 applicationid,并且可以管理不同的 URL,但您将拥有用于开发、QA、生产等的不同发布应用程序。
  • 对于不同的利益相关者(qa、staging、prod 等用户),您将拥有指向不同服务器/url 的应用程序,但关键是所有不同的应用程序只有在指向服务器不同时才会相同。因此,如果 QA 应用程序正常,则意味着其他应用程序也正常。因此,我认为,通过这种方式,您可以实现您所谈论的内容,即“当 QA 通过构建时,我可以将相同的工件推广到产品中。”。您通过使用“android-flavors”来实现这一点,您的工件是相同的,但您的构建/应用程序是不同的。希望,我已经明确了我的观点。
【解决方案2】:

如果你使用 gradle,以下是正确的:

  1. 对于顶级 build.gradle,定义 appId 参数:
allprojects {
    ext {
        appId = 'com.my.app'
    }
}
  1. 对于应用模块的 build.gradle,定义风味并使用上述参数:
android {
    def globalConfig = rootProject.extensions.getByName("ext")

    productFlavors {
        dev {
            applicationId globalConfiguration["appId"] + ".dev"
            ...
            buildConfigField "String", "YOUR_ENDPOINT", "\"https://my.dev.env/\""
        }
        qa {
            applicationId globalConfiguration["appId"] + ".qa"
            ...
            buildConfigField "String", "YOUR_ENDPOINT", "\"https://my.qa.env/\""
        }
}
  1. 使用特定风格构建应用程序 + 在代码中使用 BuildConfig.YOUR_ENDPOINT。

【讨论】:

  • Gradle 用于构建时间。我只想要一个用于我所有环境的工件,以便当 qa 通过构建时,我可以将相同的构建提升为 prod。同一个工件现在需要指向 prod 后端而不是 qa 后端。
猜你喜欢
  • 2022-07-04
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2017-02-25
  • 2013-07-09
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多