2

我希望在gcloud我的工作中运行一个命令。当然,当我最初运行这项工作时,我得到了错误“找不到命令”。CircleCI 建议使用gcloud-cliorb 安装和初始化 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 orb 将使 gcloud-cli 可用于所有下游作业。

有没有办法让 gcloud-cli 可用于下游作业?我试图持久化/附加工作区但没有成功(并不意味着这不是一个可能的解决方案)。另一种可能的解决方案是找到一种方法来运行 gcp-cli orb 作为 my 的一部分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

....
4

2 回答 2

3

我只需要自己完成一个爱好项目。我认为gcp-cli/install_and_initialize_cliorb 示例中列出的工作是红鲱鱼。正如您所注意到的,它将在自己的执行程序中运行,并在您完成工作流程中的下一个作业时消失。

解决此问题的一种简单方法是将gcp-cli/install命令作为build_job. 安装 cli 后,您gcloud可以运行适当的 auth 和 deploy 命令。在您的情况下,您会执行以下操作:

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

希望有帮助!

于 2019-09-29T21:46:03.357 回答
0

假设您在所有工作中都将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. 如果注册表需要身份验证,您可以在此处添加身份验证详细信息。

于 2019-05-31T20:49:45.110 回答