【问题标题】:Can Circle CI reference gradle.properties credentials?Circle CI 可以参考 gradle.properties 凭据吗?
【发布时间】:2022-04-30 22:21:16
【问题描述】:

我正在为 Android 项目设置 Circle CI 构建,并且想知道如何将 gradle.properties 文件添加到我的项目构建中。我使用本地 gradle.properties 来存储我的 API 密钥和敏感数据。其他 CI 工具(即 Jenkins)允许您上传 gradle.properties 文件以在所有构建中使用,但我无法在 Circle CI 中找到执行此操作的方法。

环境变量似乎是 Circle CI 允许您向项目添加秘密凭据的唯一方式。

有没有办法在 Circle CI 构建中使用来自 gradle.properties 的凭据?

【问题讨论】:

    标签: android gradle continuous-integration circleci


    【解决方案1】:

    gradle.properties 中的所有属性添加到CircleCI“环境变量”,但在它们前面加上:

    ORG_GRADLE_PROJECT_
    

    【讨论】:

    • 这与上面@kio 的答案一起使用。博客:kiodev.com/circle-ci-and-gradle-properties
    • 对于任何希望添加非织物构建配置字段的人来说,这是最佳答案,无需额外配置即可完美运行!
    • 这应该是选择的答案。
    • 我不明白。我应该创建一个像 ORG_GRADLE_PROJECT_STORE_PASSWORD 这样的环境变量和另一个 ORG_GRADLE_PROJECT_KEY_PASSWORD 它会自动提取密码吗?
    【解决方案2】:

    我找到了一种通过 Circle CI 将凭据/API 密钥添加到 gradle.properties 的方法。它允许 Android 项目以与本地和 CircleCI 构建相同的方式引用 gradle.properties 的凭据。

    第一步,将您的凭据作为环境变量存储在您的 Circle CI 项目设置中,这些环境变量保证是私有的。在 Circle CI GUI 中,转到您的项目,然后选择右上角的“项目设置”。在左侧菜单中,单击“调整”标题下的“环境变量”。您可以在此处将凭据添加为名称值对。

    接下来,在您的 Android 项目中创建一个 bash 脚本,它将您的 Circle CI 环境变量写入本地 gradle.properties 文件。我写了这样一个脚本和posted it here as gist。这是完成工作的方法:

    function copyEnvVarsToGradleProperties {
        GRADLE_PROPERTIES=$HOME"/.gradle/gradle.properties"
        export GRADLE_PROPERTIES
        echo "Gradle Properties should exist at $GRADLE_PROPERTIES"
    
        if [ ! -f "$GRADLE_PROPERTIES" ]; then
            echo "Gradle Properties does not exist"
    
            echo "Creating Gradle Properties file..."
            touch $GRADLE_PROPERTIES
    
            echo "Writing TEST_API_KEY to gradle.properties..."
            echo "TEST_API_KEY=$TEST_API_KEY_ENV_VAR" >> $GRADLE_PROPERTIES
        fi
    }
    

    此脚本仅在 Circle CI 构建期间调用,而不是在本地构建期间调用。将此脚本作为您的 circle.yml 文件中的预处理依赖项调用,以便在实际 gradle 构建开始之前编写您的 gradle.properties

    dependencies:
        pre:
            - source environmentSetup.sh && copyEnvVarsToGradleProperties
    

    您将像往常一样继续访问 build.gradle 中的 API 密钥:

    buildConfigField("String", "THIS_TEST_API_KEY", "\"" + TEST_API_KEY + "\"")

    【讨论】:

    • 没有办法从环境变量而不是 gradle.properties 中读取属性?因为如果您需要添加或删除变量,则需要进行很多编辑...
    • 不错的解决方案!我必须在触摸之前添加mkdir ~/.gradle -p,因为如果尚未创建.gradle 目录,它们就会失败。
    • 我最终使用了这个gist.github.com/danielgomezrico/…
    • @Caipivara,git 链接坏了,能重新上传一下吗
    • @BrajendraPandey gist.github.com/caipivara/461bf74a24dd5efd28abef1bebc0f05d 这个应该可以工作
    【解决方案3】:

    根据您的环境,您还可以使用 base64gradle.properties 进行编码/解码。这在我的 macOS CircleCI 环境中对我有用:

    • 在我的本地 macOS 计算机上,我使用以下代码对我的多行 gradle.properties 文件进行了编码:

      base64 < gradle.properties > encoded-gradle.properties

    • 我复制了 encoded-gradle.properties 中的值并将其放入 CircleCI 环境变量中(在本例中,将变量命名为:GRADLE_PROPERTIES_DATA

    在我的 CircleCI config.yaml 文件中,在构建之前,创建了 gradle.properties 文件并将编码值解码并将其放入 gradle.properties,使用以下内容:

    echo $GRADLE_PROPERTIES_DATA | base64 --decode > gradle.properties
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-05
      • 2016-01-01
      • 1970-01-01
      • 2023-03-28
      • 2021-12-21
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      相关资源
      最近更新 更多