撰写桌面项目:如何在不提交的情况下包含 API 密钥(或其他机密)?
Compose Desktop projects: how to include API keys (or other secrets) without committing?
在 Compose Desktop 项目中,我们如何在不提交的情况下管理密钥?
在Android个项目中,Gradle有buildConfigField()
和resValue()
函数。它们会在编译时生成一个BuildConfig.java
,我们可以在运行时使用这些值。
例如,在一个Android项目中,首先,我们创建两个环境变量——RELEASE_API_KEY
和STAGING_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 项目中是否有类似的方法,以便:
- 我不必将秘密提交到源存储库?
- 我可以在 CI/CD 环境中轻松配置机密吗?
所以有一些 Gradle 插件是为了解决这样的问题而构建的 - 将构建时间常量注入我们的运行时代码。这是 Google 搜索中出现的那个:
https://github.com/gmazzo/gradle-buildconfig-plugin
这是我将配置中的 c 换成 k 时出现的问题(你知道这些 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
在 Compose Desktop 项目中,我们如何在不提交的情况下管理密钥?
在Android个项目中,Gradle有buildConfigField()
和resValue()
函数。它们会在编译时生成一个BuildConfig.java
,我们可以在运行时使用这些值。
例如,在一个Android项目中,首先,我们创建两个环境变量——RELEASE_API_KEY
和STAGING_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 项目中是否有类似的方法,以便:
- 我不必将秘密提交到源存储库?
- 我可以在 CI/CD 环境中轻松配置机密吗?
所以有一些 Gradle 插件是为了解决这样的问题而构建的 - 将构建时间常量注入我们的运行时代码。这是 Google 搜索中出现的那个:
https://github.com/gmazzo/gradle-buildconfig-plugin
这是我将配置中的 c 换成 k 时出现的问题(你知道这些 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