Как сохранить данные между заданиями CircleCI с помощью рабочих процессов? В частности, gcloud-cli с использованием сфер

Я хочу запустить команду gcloud в рамках одной из своих работ. Конечно, когда я изначально запускал задание, я получал ошибку «команда не найдена». CircleCI предлагает использовать gcloud-cli orb для установки и инициализации gcloud cli.

Мой рабочий процесс выглядит так:

workflows:
  build and deploy:
    jobs:
      - gcp-cli/install_and_initialize_cli:
          gcloud-service-key: insert_key_as_env_variable
          google-project-id: my_project_id
          google-compute-zone: my_compute_zone
      - build_job:
          requires:
            - gcp-cli/install_and_initialize_cli

Шаг gcp-cli/install_and_initialize_cli работает отлично, но когда я запускаю build_job, он говорит, что gcloud команда не найдена. Я предполагал, что запуск шара gcp-cli сделает gcloud-cli доступным для всех последующих заданий.

Есть ли способ сделать gcloud-cli доступным для последующих заданий? Я пытался сохранить / прикрепить рабочие области, но безуспешно (не означает, что это невозможно). Другое возможное решение - найти способ запустить шар gcp-cli как часть моего build_job, но я тоже не могу понять, как это сделать.

Для справки мой (очень урезанный) build_job:

build_job:
    docker:
      - image: circleci/node
    steps:
      - run: gcloud auth configure-docker // FAILS HERE - moved to top on purpose

      - checkout

      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-

      - run:
          name: Install Docker Compose
          command: |
            curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
            chmod +x ~/docker-compose
            sudo mv ~/docker-compose /usr/local/bin/docker-compose

      - setup_remote_docker

....

person Grant    schedule 31.05.2019    source источник


Ответы (2)


Мне просто пришлось самому поработать над этим для хобби-проекта. Я думаю, что задание gcp-cli/install_and_initialize_cli, указанное в примерах сфер, - отвлекающий маневр; как вы заметили, он запускается в собственном исполнителе и исчезает, когда вы переходите к следующему заданию в рабочем процессе.

Простой способ обойти эту проблему - запустить gcp-cli/install команда как шаг в вашем build_job. После того, как вы установили gcloud cli, вы можете запустить соответствующие команды auth и deploy. В вашем случае вы бы сделали что-то вроде:

build_job:
docker:
  - image: circleci/node
steps:
   - gcp-cli/install
   # do gcloud stuff here

Надеюсь, это поможет!

person Jama22    schedule 29.09.2019

Предполагая, что вы используете circleci/node в качестве базового изображения во всех заданиях, и предполагая, что вы хотите, чтобы gcloud был доступен во всех из них, я бы сделал следующее:

Создайте новый конвейер для создания образа Docker, чтобы при нажатии на него в системе управления версиями он создавал образ и отправлял образ в реестр Docker. Используйте FROM circleci/node в начале Dockerfile, а затем установите gcloud, как обычно в Linux. Пометьте его URL-адресом вашего реестра, например например registry.gitlab.com/grant-isdale/gcloud-node, так что вы можете нажимать и извлекать его (конечно, заменяя свое имя пользователя и имя реестра, если это необходимо).

Затем в ваших заданиях CircleCI используйте registry.gitlab.com/grant-isdale/gcloud-node вместо circleci/node. Вы можете добавить сюда данные аутентификации, если реестр требует аутентификации.

person halfer    schedule 31.05.2019