CircleCI appengine 文档建议使用密码进行部署。如何使用 oauth2 流程而不是使用密码?我不想分享我的 Google 密码。
我是否~/.appcfg_oauth2_tokens_java
从 CircleCI 中存储为环境变量的令牌数据生成文件?有没有更简单的方法?
CircleCI appengine 文档建议使用密码进行部署。如何使用 oauth2 流程而不是使用密码?我不想分享我的 Google 密码。
我是否~/.appcfg_oauth2_tokens_java
从 CircleCI 中存储为环境变量的令牌数据生成文件?有没有更简单的方法?
我这样解决了这个问题:
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
文件。
阅读 AppEngine SDK 文档,听起来这将是一个好方法。在 CircleCI 上没有内置的方法可以做到这一点。
如果您不想使用任何与用户相关的凭据,则可以利用服务帐户,如本博文中所述: 使用 Google App Engine 和 CircleCI 进行持续部署
我在最新的 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似乎没有作为选项出现,但它就在那里,并且确实有效。