Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Jib-googlecontainerregistry:can';t向注册表进行身份验证时出错";无法分析json密钥";_Google Cloud Platform_Gitlab Ci_Google Container Registry_Jib - Fatal编程技术网

Google cloud platform Jib-googlecontainerregistry:can';t向注册表进行身份验证时出错";无法分析json密钥";

Google cloud platform Jib-googlecontainerregistry:can';t向注册表进行身份验证时出错";无法分析json密钥";,google-cloud-platform,gitlab-ci,google-container-registry,jib,Google Cloud Platform,Gitlab Ci,Google Container Registry,Jib,我想把我的图片推到谷歌的容器注册处 我使用的命令是(通过Gitlab Ci执行,变量正在工作,提前一个阶段进行测试): 服务帐户的权限为“存储对象管理” 错误:(顺便说一句:Spring启动应用程序正在工作-在前台进行测试) 我真的希望有人能帮我解决这个问题。googleServiceAccount的值应该是JSON密钥文件的内容(即,不是文件路径),例如 当然,如果在命令行上运行,应该正确引用/转义内容 例如,按照官方规定,如果您使用docker login在本地登录,则 docker log

我想把我的图片推到谷歌的容器注册处

我使用的命令是(通过Gitlab Ci执行,变量正在工作,提前一个阶段进行测试):

服务帐户的权限为“存储对象管理”

错误:(顺便说一句:Spring启动应用程序正在工作-在前台进行测试)


我真的希望有人能帮我解决这个问题。

googleServiceAccount的值应该是JSON密钥文件的内容(即,不是文件路径),例如

当然,如果在命令行上运行,应该正确引用/转义内容

例如,按照官方规定,如果您使用
docker login
在本地登录,则

docker login -u _json_key -p "$(cat keyfile.json)" https://[HOSTNAME]
Google容器注册(GCR)服务器正在抱怨(400个错误请求,意味着您发送了无效/意外的请求),因为它无法将
$googleServiceAccount
的内容解析为JSON

因此,我非常确定您没有提供密钥文件的全部JSON内容,或者缺少或损坏了一些东西,这使得它成为无效的JSON结构。仔细检查密钥文件和变量内容

一个常见的错误是,
$googleServiceAccount
是一个关键文件路径。在这种情况下,这可能会起作用:

mvn compile jib:build \
  -Djib.to.image=$registry \
  -Djib.to.auth.username=_json_key \
  -Djib.to.auth.password="$( cat $googleServiceAccount )"

注意,
“$(cat…”
以获取文件正确转义/引用的JSON内容。

我通过构建自己的docker映像解决了这个问题,该映像包括

  • 马文
  • JDK
  • 谷歌SDK

顺便说一句,令牌是文件,而不是密钥

看起来像是错误的凭据:
未经授权用于eu.gcr.io/(项目id):400错误请求
-你确定你有正确的请求吗?是的,我想是的,因此在我发布到这里之前,我甚至检查了param和json密钥。:)我认为JIB内部存在一些问题,它无法处理json文件。但老实说,我是Jib开发人员之一,我确信这不是一个Jib问题。Jib根本不处理由
Jib.to.auth.password
给出的字符串文本。该值将按原样传递给GCR。正如您在另一个答案中提到的,我怀疑
$googleServiceAccount
是一个文件路径,而不是JSON内容。谢谢您提供的解决方案。它的方式清洁和工作像一个魅力!在
$googleServiceAccount
是一个文件路径的情况下,这可能会起作用:
mvn compile jib:build-Djib.to.image=$registry-Djib.to.auth.username=_json\u key-Djib.to.auth.password=“$(cat$googleServiceAccount)”
。注意
“$(cat…)”
以获取文件的JSON内容。
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQI
{
  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMII...",
  "client_email": "....iam.gserviceaccount.com",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/....iam.gserviceaccount.com"
}
docker login -u _json_key -p "$(cat keyfile.json)" https://[HOSTNAME]
mvn compile jib:build \
  -Djib.to.image=$registry \
  -Djib.to.auth.username=_json_key \
  -Djib.to.auth.password="$( cat $googleServiceAccount )"
The command:
 - gcloud auth activate-service-account (service-account) --key-file=$googleServiceAccount
 - gcloud auth configure-docker
 - mvn compile jib:build -Djib.to.image=$registry