Дрон CI развернуть в Google Compute Engine - PullRequest
0 голосов
/ 06 июля 2019

я пытаюсь использовать Drone ci для автоматического развертывания моего приложения в Google cloud Compute Engine.Я пытался во многих отношениях, но я не могу развернуть что-нибудь.

У меня есть все этапы тестирования и публикации, я могу автоматически перенести мой код в мой реестр контейнеров Google, построить дроун-образ и отправить его.

Я авторизируюсь на своем экземпляре Compute Engine,Я застрял, пытаясь подключить компьютер к реестру контейнера 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 Deamon из экземпляра?

1 Ответ

0 голосов
/ 07 июля 2019

Неисправная команда здесь:

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
...