Can Circle CI可以参考gradle.properties凭据吗?

时间:2016-02-16 19:01:56

标签: android gradle continuous-integration circleci

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

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

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

2 个答案:

答案 0 :(得分:12)

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

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

接下来,在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 + "\"")

答案 1 :(得分:1)

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

ORG_GRADLE_PROJECT_