im试图使用Drone ci在Google Cloud Compute Engine上自动部署我的应用程序。我尝试了很多方法,但是我什么都不能部署。
我的测试和发布阶段运行良好,我可以将自己的代码自动推送到我的Google容器注册表中,使用无人机构建图像并将其推送。
我对我的计算引擎实例进行身份验证,我在尝试将计算机连接到Google容器注册表时遇到了麻烦,但是我无法运行生成的映像。这是我缺少的最后一步,我做不到。
这是我的.drone-ci.yml文件,其中包含以下步骤:
kind: pipeline
name: my-app
steps:
- name: test
image: node:11-alpine
commands:
- npm install
- npm run test
- name: publish
image: plugins/gcr
settings:
repo: project-id/my-app
dockerfile: Dockerfile
tags: latest
json_key:
from_secret: google_credentials
- name: deploy
image: google/cloud-sdk:alpine
environment:
google_credentials:
from_secret: google_credentials
commands:
- echo $google_credentials > /tmp/$CI_PIPELINE_ID.json
- gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
- gcloud compute ssh my-instance --zone my-zone --command "cat $google_credentials | sudo docker login -u _json_key --password-stdin https://gcr.io"
- gcloud compute ssh my-instance --zone us-east1-b --command "sudo docker run -d -p 80:3000 --restart always --env-file ./env.list gcr.io/project-id/my-app:latest"
它抛出此错误(是最后一个错误):
cat: '{': No such file or directory
bash: line 1: type:: command not found
bash: line 2: project_id:: command not found
bash: line 3: private_key_id:: command not found
bash: line 4: private_key:: command not found
bash: line 5: client_email:: command not found
bash: line 6: client_id:: command not found
bash: line 7: auth_uri:: command not found
bash: line 8: token_uri:: command not found
bash: line 9: auth_provider_x509_cert_url:: command not found
bash: line 10: client_x509_cert_url:: command not found
bash: -c: line 11: syntax error near unexpected token `}'
bash: -c: line 11: `} | sudo docker login -u _json_key --password-stdin
https://gcr.io'
我以其他方式尝试过,但我从未成功向Google容器注册表进行身份验证。 我该如何从实例验证Docker守护进程?
答案 0 :(得分:0)
错误的命令是:
cat $google_credentials | sudo docker login -u _json_key --password-stdin https://gcr.io
您的变量$google_credentials
保存JSON密钥的内容:它不保存文件的路径,因此cat $google_credentials
没有意义。由于文件/tmp/$CI_PIPELINE_ID.json
包含您的JSON密钥,因此您应该编写:
cat /tmp/$CI_PIPELINE_ID.json | \
sudo docker login -u _json_key --password-stdin https://gcr.io
或者(未经测试,请谨慎使用):
echo $google_credentials | \
sudo docker login -u _json_key --password-stdin https://gcr.io
第三个解决方案(我确信这是可行的,因为我已经使用它进行身份验证了):
docker login -u _json_key -p "$(cat /tmp/$CI_PIPELINE_ID.json)" https://gcr.io