2

CircleCI appengine 文档建议使用密码进行部署。如何使用 oauth2 流程而不是使用密码?我不想分享我的 Google 密码。

我是否~/.appcfg_oauth2_tokens_java从 CircleCI 中存储为环境变量的令牌数据生成文件?有没有更简单的方法?

4

4 回答 4

2

我这样解决了这个问题:

deployment:
  appengine:
    branch: master
    commands:
      - erb .appcfg_oauth2_tokens_java.json > ~/.appcfg_oauth2_tokens_java # requires ENV in circle ci
      - mvn -DskipTests=true appengine:update # tests have already been run

.appcfg_oauth2_tokens_java.json:

{
    "credentials": {
        "ubuntu": {
            "access_token": "<%= ENV["GOOGLE_ACCESS_TOKEN"] %>",
            "expiration_time_millis": 1431552739090,
            "refresh_token": "<%= ENV["GOOGLE_REFRESH_TOKEN"] %>"
        }
    }
}

然后在 CircleCI 中,为两个令牌配置 ENV 变量。我通过在本地运行mvn appengine:update并通过 oAuth2 舞蹈获得了令牌。注意:您可能必须先删除现有~/.appcfg_oauth2_tokens_java文件。

于 2015-05-13T21:58:10.917 回答
0

阅读 AppEngine SDK 文档,听起来这将是一个好方法。在 CircleCI 上没有内置的方法可以做到这一点。

于 2015-05-13T17:54:24.617 回答
0

如果您不想使用任何与用户相关的凭据,则可以利用服务帐户,如本博文中所述: 使用 Google App Engine 和 CircleCI 进行持续部署

于 2015-10-10T04:46:36.720 回答
0

我在最新的 GAE SDK 1.9.34 for Java 上解决了这个问题。

假设您有一个 Base64 编码的 ENV 变量和您在 GCloud 项目上创建的服务帐户的 JSON 密钥:

dependencies:
  pre:
    - echo $GOOGLE_CLIENT_SECRET | base64 --decode > ${HOME}/client-secret.json

然后在部署部分:

- $HOME/appengine-java-sdk-$APP_ENGINE_VERSION/bin/appcfg.sh -A $GCLOUD_PROJECT -M $GCLOUD_MODULE -V $BUILD_VERSION --service_account_json_key_file=$HOME/client-secret.json update $WAR_FOLDER

当您使用appcfg.sh帮助时,--service_account_json_key_file似乎没有作为选项出现,但它就在那里,并且确实有效。

于 2016-04-15T16:09:38.033 回答