GItlab CI :- 如何使用 Gitlab-CI 在 Android 中创建多个 apk(如开发、暂存和生产)?

GItlab CI :- How to create the multiple apk(like development, staging and production) in Android using the Gitlab-CI?

我能够通过 Gitlab 中的以下方法使用 Gitlab-CI 创建单个构建(apk),如 debug.apk

在我的 .gitlab-ci.yml 里面,我做了这个 entry.Please 检查一次,

image: jangrewe/gitlab-ci-android

stages:
  - build

before_script:
  - export GRADLE_USER_HOME=$(pwd)/.gradle
  - chmod +x ./gradlew

cache:
  key: ${CI_PROJECT_ID}
  paths:
    - .gradle/

build:
  stage: build
  tags:
    - dev-ci
  script:
    - ./gradlew assembleDebug
  artifacts:
    paths:
      - app/build/outputs/

并且我创建了 docker 图像并在 Gitlab 上每次推送时都获得了构建 (apk)。

我的问题是,我们可以设置不同的阶段,如 DevelopmentStagingProduction指出应用的不同BASE_URL。我也在文档中搜索过,但没有得到 solution.Please 的帮助。谢谢

.gitlab-ci.yml内设置BASE_URL

image: jangrewe/gitlab-ci-android

stages:
  - build

before_script:
  - export GRADLE_USER_HOME=$(pwd)/.gradle
  - chmod +x ./gradlew

cache:
  key: ${CI_PROJECT_ID}
  paths:
    - .gradle/

development:
  stage: build
  tags:
    - dev-ci
  script:
    - ./gradlew assembleDevelopment
  artifacts:
    paths:
      - app/build/outputs/
  variables:
    BASE_URL: "https://whosebug.com"

staging:
  stage: build
  tags:
    - dev-ci
  script:
    - ./gradlew assembleStaging
  artifacts:
    paths:
      - app/build/outputs/
  variables:
    BASE_URL: "https://yahoo.com"

production:
  stage: build
  tags:
    - dev-ci
  script:
    - ./gradlew assembleProduction
  artifacts:
    paths:
      - app/build/outputs/
  variables:
    BASE_URL: "https://google.com"

您必须在 gradle 文件中创建 Android 风味 developmentstagingproduction,并使它们使用 BASE_URL 环境变量。

或者,就像 Alexander Hoffmann 所建议的那样,在您的 gradle 文件中执行所有操作,而无需在 .gitlab-ci.yml.

中设置变量

@mles 解决方案有效,但它依赖于设置环境变量。这对于 CI 用例非常有用,但如果您 想在本地快速构建 dev/staging/release 版本,则应该改用构建类型或风格。查看 Configure build variants 指南了解更多信息。

以下示例展示了如何使用构建类型实现此目的,但使用风格也非常相似。

使用 gradle 构建类型和源集配置不同的 API 基础 URL

添加额外的构建类型

默认的 gradle 配置应该已经包含 debugrelease 构建类型。通过在 buildTypes:

内的应用程序模块的 build.gradle 文件中添加此行来添加额外的 staging 构建类型
staging {
    initWith debug
}

您的 build.gradle 应该如下所示:

android {
    ...

    defaultConfig {
        ...
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        staging {
            initWith debug
        }
    }
}

dependencies {
    ...
}

之后执行 gradle 同步(通过按顶部带有大象徽标的“与 Gradle 同步项目”按钮)。

添加额外的源集

您可以告诉 gradle 为特定的构建配置打包特定的代码和资源。在我们的示例中,我们将为每个构建类型创建一个 ExampleConfig 文件,其中包含基础 URl。

object ExampleConfig {
    const val BASE_ULR = "http://example.com/"
}

在您的代码中,您只需引用此文件即可访问基础 URL。根据所选的构建类型,gradle 将自动使用文件的正确版本。

为此,在模块 src 文件夹中添加以下文件夹(例如在 \app\src 中):

  • debug/java
  • staging/java
  • release/java

在那里,创建 ExampleConfig class / 包含具有不同值的 baseUrl 字符串的对象。结果应如下所示:

它应该是这样的:

换 CI 工作

在您的 CI 中,通过使用不同的配置调用 assemble 来构建不同的版本:

  • ./gradlew assembleDebug
  • ./gradlew assembleStaging
  • ./gradlew assembleRelease

您示例中的最终 gitlab-ci 配置应如下所示:

image: jangrewe/gitlab-ci-android

stages:
  - build

before_script:
  - export GRADLE_USER_HOME=$(pwd)/.gradle
  - chmod +x ./gradlew

cache:
  key: ${CI_PROJECT_ID}
  paths:
    - .gradle/

build:
  stage: build
  tags:
    - dev-ci
  script:
    - ./gradlew assembleDebug assembleStaging assembleRelease
  artifacts:
    paths:
      - app/build/outputs/