Как развернуть несколько контейнеров docker в gcloud с помощью Travis CI? - PullRequest
0 голосов
/ 06 января 2020

У меня проблемы с доступом к моему вычислительному движку gcloud через Travis-CI, поэтому я могу иметь возможности CI / CD.

Пока, используя мой текущий код, я могу использовать свой репозиторий git для запуска контейнеров docker на Travis CI, чтобы увидеть, что они работают.

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

Однако, когда я добираюсь до шага, на котором я хочу s sh в мой вычислительный экземпляр, чтобы вытащить и запустить мои контейнеры, я сталкиваюсь с проблемами.

Я пытался использовать gcloud compute ssh --command, но у меня возникают проблемы с тем, что gcloud не установлен на моем экземпляре. Получена ошибка:

Если я пытаюсь запустить команду gcloud, она просто говорит, что gcloud отсутствует.

bash: gcloud: command not found
The command "gcloud compute ssh --quiet --project charged-formula-262616 --zone us-west1-b   instance-1 --command="gcloud auth configure-docker "" failed and exited with 127 during. 

Я также попытался загрузить gcloud sdk и снова запустить конфигурацию docker, но я начать получать ошибку ниже.

bash
Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
Using default tag: latest

Я могу s sh войти в него, используя в качестве другого пользователя putty, чтобы вытащить из хранилища без проблем, запустить контейнеры и получить команду gcloud.

Единственное, о чем я могу подумать, это то, что две учетные записи, используемые для s sh, отличаются, но оба ключа добавлены в экземпляр, и я не вижу, где я могу контролировать их разрешения. Я также создал служебную учетную запись для travis ci и предоставил ей все те же разрешения, что и для учетной записи вычислительной службы, но все еще не играл в кости ...

Любая помощь или совет будут высоко оценены!

My файл travis выглядит следующим образом:

sudo: required
language: generic
services:
  - docker
env:
  global:
    - SHA=$(git rev-parse HEAD)
    - CLOUDSDK_CORE_DISABLE_PROMPTS=1

cache:
  directories:
    - "$HOME/google-cloud-sdk/"
before_install:
  - openssl aes-256-cbc -K $encrypted_0c35eebf403c_key -iv $encrypted_0c35eebf403c_iv
    -in secrets.tar.enc -out secrets.tar -d
  - tar xvf secrets.tar
  - if [ ! -d "$HOME/google-cloud-sdk/bin" ]; then rm -rf $HOME/google-cloud-sdk; export
    CLOUDSDK_CORE_DISABLE_PROMPTS=1; curl https://sdk.cloud.google.com | bash; fi
  - source $HOME/google-cloud-sdk/path.bash.inc
  - gcloud auth activate-service-account --key-file service-account.json
  - gcloud components update
  - gcloud components install docker-credential-gcr
  - gcloud version
  - eval $(ssh-agent -s)
  - chmod 600 deploy_key_open
  - echo -e "Host $SERVER_IP_ADDRESS\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
  - ssh-add deploy_key_open
  - gcloud auth configure-docker

  # - sudo docker pull gcr.io/charged-formula-262616/web-client
  # - sudo docker pull gcr.io/charged-formula-262616/web-nginx

deploy:
  provider: script
  script: bash ./deploy.sh
  on:
    branch: master

, а скрипт bash -

# docker build -t gcr.io/charged-formula-262616/web-client:latest -t gcr.io/charged-formula-262616/web-client:$SHA  -f ./client/Dockerfile ./client
# docker build -t gcr.io/charged-formula-262616/web-nginx:latest -t gcr.io/charged-formula-262616/web-nginx:$SHA -f ./nginx/Dockerfile ./nginx
# docker build -t gcr.io/charged-formula-262616/web-server:latest -t gcr.io/charged-formula-262616/web-server:$SHA -f ./server/Dockerfile ./server
docker push gcr.io/charged-formula-262616/web-client
docker push gcr.io/charged-formula-262616/web-nginx
docker push gcr.io/charged-formula-262616/web-server
#  curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-274.0.1-linux-x86_64.tar.gz
#  tar zxvf google-cloud-sdk-274.0.1-linux-x86_64.tar.gz google-cloud-sdk
#  ./google-cloud-sdk/install.sh
#  sudo docker container stop $(docker container ls -aq)
# echo "1 " | gcloud init 
ssh -o StrictHostKeyChecking=no -i deploy_key_open travis-ci@104.196.226.118 << EOF
source /home/travis-ci/google-cloud-sdk/path.bash.inc
gcloud auth configure-docker
sudo docker-credential-gcloud list
 sudo docker pull gcr.io/charged-formula-262616/web-nginx
 sudo docker pull gcr.io/charged-formula-262616/web-client
 sudo docker pull gcr.io/charged-formula-262616/web-server
 sudo docker run --rm -d -p 3000:3000 gcr.io/charged-formula-262616/web-client
 sudo docker run --rm -d -p 80:80 -p 443:443 gcr.io/charged-formula-262616/web-nginx
 sudo docker run --rm -d -p 5000:5000 gcr.io/charged-formula-262616/web-server
 sudo docker run --rm -d -v /database_data:/var/lib/postgresql/data -e POSTGRES_USER -e POSTGRES_PASSWORD -e POSTGRES_DB postgres 
EOF

1 Ответ

0 голосов
/ 06 января 2020

Отправленная вами ошибка включает ссылку на Методы аутентификации , где предлагаются некоторые механизмы аутентификации docker, такие как:

gcloud auth configure-docker

и другие более продвинутые методы аутентификации. Я рекомендую вам проверить это, поскольку это поможет вам решить вашу проблему.

Чтобы установить команду gcloud, вы можете следовать руководству в Установка Google Cloud SDK . Что для Linux это это .

...