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)。
我的问题是,我们可以设置不同的阶段,如 Development
, Staging
和 Production
指出应用的不同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 风味 development
、staging
、production
,并使它们使用 BASE_URL
环境变量。
或者,就像 Alexander Hoffmann 所建议的那样,在您的 gradle 文件中执行所有操作,而无需在 .gitlab-ci.yml
.
中设置变量
@mles 解决方案有效,但它依赖于设置环境变量。这对于 CI 用例非常有用,但如果您 也 想在本地快速构建 dev/staging/release 版本,则应该改用构建类型或风格。查看 Configure build variants 指南了解更多信息。
以下示例展示了如何使用构建类型实现此目的,但使用风格也非常相似。
使用 gradle 构建类型和源集配置不同的 API 基础 URL
添加额外的构建类型
默认的 gradle 配置应该已经包含 debug
和 release
构建类型。通过在 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/
我能够通过 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)。
我的问题是,我们可以设置不同的阶段,如 Development
, Staging
和 Production
指出应用的不同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 风味 development
、staging
、production
,并使它们使用 BASE_URL
环境变量。
或者,就像 Alexander Hoffmann 所建议的那样,在您的 gradle 文件中执行所有操作,而无需在 .gitlab-ci.yml
.
@mles 解决方案有效,但它依赖于设置环境变量。这对于 CI 用例非常有用,但如果您 也 想在本地快速构建 dev/staging/release 版本,则应该改用构建类型或风格。查看 Configure build variants 指南了解更多信息。
以下示例展示了如何使用构建类型实现此目的,但使用风格也非常相似。
使用 gradle 构建类型和源集配置不同的 API 基础 URL
添加额外的构建类型
默认的 gradle 配置应该已经包含 debug
和 release
构建类型。通过在 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/