Я пытаюсь развернуть образец приложения с помощью circleci для gke с помощью google cloudrun. Я создал кластер в облаке Google и хотел создать и развернуть образ в контейнере. Он отлично работает, если я делаю это вручную. Но я хотел создать автоматизированный конвейер CI / CD и, следовательно, использовать для этого CircleCI.
Пропуская пока части тестирования и покрытия кода, я хочу создать конвейер для развертывания gke.
Вот файл config.yaml для circleci. Я пытаюсь использовать уже имеющиеся сертифицированные шары, так как создание одного с нуля занимает больше времени.
version: 2.1
orbs:
gcp-gcr: circleci/[email protected]
cloudrun: circleci/[email protected]
executors:
node-executor:
docker:
- image: node:12.8.1-stretch
gcloud-executor:
docker:
- image: google/cloud-sdk
machine-executor:
machine: true
jobs:
build:
description: initial build
executor: machine-executor
steps:
- checkout
build_push_image_cloud_run_mangaged:
executor: node-executor
steps:
- checkout
- setup_remote_docker:
docker_layer_caching: false
- run:
name: Prepare env vars
command: |
echo 'export PATH=~$PATH:~/.local/bin' >> $BASH_ENV
echo 'export GOOGLE_PROJECT_ID=$GCLOUD_PROJECT' >> $BASH_ENV
echo 'export GOOGLE_COMPUTE_ZONE=us-east1-b' >> BASH_ENV
echo ${GCP_PROJECT_KEY} > ${HOME}/gcloud-service-key.json
echo 'export GOOGLE_CLOUD_KEYS=$(cat $HOME/gcloud-service-key.json)' >> $BASH_ENV
echo 'export TAG=${CIRCLE_SHA1}' >> $BASH_ENV
echo 'export IMAGE_NAME=$CIRCLE_PROJECT_REPONAME' >> $BASH_ENV && source $BASH_ENV
- gcp-gcr/gcr-auth:
gcloud-service-key: GOOGLE_CLOUD_KEYS # this is throwing error
google-project-id: GOOGLE_PROJECT_ID
google-compute-zone: GOOGLE_COMPUTE_ZONE
- gcp-gcr/build-image:
dockerfile: Dockerfile
google-project-id: GOOGLE_PROJECT_ID
image: $IMAGE_NAME
registry-url: "gcr.io"
tag: $CIRCLE_SHA1
- gcp-gcr/push-image:
google-project-id: GOOGLE_PROJECT_ID
image: $IMAGE_NAME
registry-url: "gcr.io"
tag: $CIRCLE_SHA1
- cloudrun/init:
gcloud-service-key: GCLOUD_SERVICE_KEY
google-project-id: GOOGLE_PROJECT_ID
google-compute-zone: GOOGLE_COMPUTE_ZONE
- cloudrun/deploy:
cluster: "new-cluster"
cluster-location: "us-east1-b"
platform: "gke"
image: "gcr.io/$GOOGLE_PROJECT_ID/$IMAGE_NAME"
service-name: "orb-gcp-cloud-run"
workflows:
build_gcloud_deploy:
jobs:
- build
- build_push_image_cloud_run_mangaged:
requires:
- build
У меня есть переменные среды, установленные в настройках проекта с помощью GCLOUD_SERVICE_KEY и GCP_PROJECT_KEY, оба имеют закодированные версии json файла моей учетной записи службы. У меня также установлены значения окружения GOOGLE_PROJECT_ID и GOOGLE_COMPUTE_ZONE соответственно. Теперь, когда я запускаю сборку для проверки (настроил веб-перехватчик для успешной проверки - позже будет изменен для успешного слияния), на шаге всегда возникают ошибки: инициализировать gcloud
#!/bin/bash -eo pipefail
# Store service account
echo $GOOGLE_CLOUD_KEYS > ${HOME}/gcloud-service-key.json
# Initialize gcloud CLI
gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json
gcloud --quiet config set project $GOOGLE_PROJECT_ID
gcloud --quiet config set compute/zone $GOOGLE_COMPUTE_ZONE
ERROR: (gcloud.auth.activate-service-account) Could not read json file /root/gcloud-service-key.json: No JSON object could be decoded
Exited with code exit status 1
CircleCI received exit code 1
Я попытался использовать переменную окружения GOOGLE_CLOUD_KEYS, которую я установил в переменной gcloud-service-key.json в шагах circleci, но это тоже приводит к той же ошибке. Я также попытался указать переменную env, которая имеет фактическое значение файла json (не декодировано), но это тоже приводит к той же ошибке. Как видите, я использую orb: gcp-gcr: circleci/[email protected]. Не могли бы вы сообщить мне, что вызывает ошибку и как ее исправить?
РЕДАКТИРОВАТЬ:
Как правильно указал Ахмет, проблема связана с файлом, не содержащим данных. Я внес такие изменения, что создал переменную env для проекта как GCLOUD_SERVICE_KEY и получил доступ к ней напрямую, без кодирования (это не рекомендуемый подход, так как лучше всего закодировать ее, а затем сохранить ключ).
gcloud-service-key.json
файлом. Может быть, просто добавьте командуcat gcloud-service-key.json
илиstat gcloud-service-key.json
, чтобы увидеть, является ли файл пустым или искаженным JSON. - person Ahmet Alp Balkan   schedule 10.12.2019