0

我正在自动化我们的构建过程。在执行推送之前,我运行以下脚本来登录正确的服务帐户。

if [[ "${DEPLOY_ENV}" == "production" ]]; then
    gcloud auth activate-service-account --key-file "$DIR/production-secret.json"
else
    gcloud auth activate-service-account --key-file "$DIR/test-secret.json"
fi

但是,无论是哪个登录名,当我执行此命令时,我总是会推送到我们的“测试”帐户的注册表

gcloud docker -- push gcr.io/talk-like-humans/api:${IMAGE_VERSION}

我需要运行另一个命令来将我的推送端点设置为正确的帐户吗?

谢谢,托德

4

1 回答 1

0

您推送到的存储库由映像名称决定,而不是使用的凭据。你的命令

gcloud docker -- push gcr.io/talk-like-humans/api:${IMAGE_VERSION}

意味着您将始终将调用的图像推api:${IMAGE_VERSION}送到talk-like-humans存储库(在gcr.io注册表中)。如果您的测试和生产凭证都在那里具有写入权限,那么它们都会成功。

在我看来,你想要这样的东西:

if [[ "${DEPLOY_ENV}" == "production" ]]; then
    gcloud auth activate-service-account --key-file "$DIR/production-secret.json"
    REPO="${PROD_REPO}"
else
    gcloud auth activate-service-account --key-file "$DIR/test-secret.json"
    REPO="${TEST_REPO}"
fi
`gcloud docker -- push "gcr.io/${REPO}/api:${IMAGE_VERSION}"`

此外,我会撤销${PROD_REPO}对服务帐户的访问权限test-secret.json——这样您的开发流程就不会意外地推送到生产环境。

于 2017-04-28T12:40:15.527 回答