1

Compose Desktop项目中,我们如何在不提交的情况下管理密钥?

在 Android 项目中,Gradle 具有buildConfigField()resValue()功能。它们将BuildConfig.java在编译期间生成,我们可以在运行时使用这些值。

例如,在一个 Android 项目中,首先,我们创建两个环境变量 —RELEASE_API_KEYSTAGING_API_KEY(它可以是本地计算机,也可以是 CI/CD 环境)。

然后在 build.gradle 文件中我们可以说:

android {
   buildTypes {
     release {
       buildConfigField("String", "API_KEY", "\"${System.getenv('RELEASE_API_KEY')}\"")
     }
     staging {
       buildConfigField("String", "API_KEY", "\"{System.getenv('STAGING_API_KEY')}\"")
     }
   }
}

..在 Kotlin 代码中我们可以使用:

val apiManager = ApiManager( BuildConfig.API_KEY )

Compose Desktop项目中是否有类似的方法,以便:

  1. 我不必将秘密提交到源存储库?
  2. 我可以在 CI/CD 环境中轻松配置机密吗?
4

1 回答 1

1

所以有一些 Gradle 插件就是为了解决这样的问题而构建的——将构建时间常量注入到我们的运行时代码中。这是谷歌搜索中出现的一个:

https://github.com/gmazzo/gradle-buildconfig-plugin

这是我将 config 中的 c 换成 ak 时出现的问题(你知道这些 Kotlin 开发人员无法抗拒吗?)

https://github.com/yshrsmz/BuildKonfig

当然 - 如果你不想像这样搞乱 gradle 插件,简单的解决方案是用你的开发代码创建一个文件,其中相同的常量被清空或为空字符串,或者引用一个被忽略的文件来获取值,然后使用 bash 覆盖 CI 中的文件,用你想要的替换所有常量。当您无法访问 gradle 时,这种方法非常有用,例如在 js 项目中:

#!/usr/bin/env bash

AWS_FILE=<your aws credentials file here>
if [ -f "$AWS_FILE" ]; then
    echo "Injecting the AWS Credentials"
    echo "export const AWS_CREDENTIALS = {
    clientId: \"$AWS_CLIENT_ID\",
    secret: \"$AWS_CLIENT_SECRET\"}" > $AWS_FILE
else
    echo "$AWS_FILE doesn't exist."
    exit 1
fi
于 2022-02-05T22:05:27.590 回答