如何使用工作流在CircleCI作业之间保留数据?特别是使用orbs的gcloud-cli

时间:2019-05-31 13:52:57

标签: gcloud circleci circleci-workflows 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 orb将使gcloud-cli可用于所有下游作业。

是否有办法使gcloud-cli对下游作业可用?我尝试过保留/附加工作区,但没有成功(并不意味着这不是可能的解决方案)。 另一种可能的解决方案是找到一种方法来运行gcp-cli orb作为我的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

....

2 个答案:

答案 0 :(得分:0)

假设您在所有作业中都使用main : Program () Model Msg main = Browser.element { init = \() -> initialModel , update = update , view = view , subscriptions = subscriptions } 作为基本映像,并假设您希望circleci/node在所有作业中均可用,那么我将执行以下操作:

创建一个新管道以构建Docker映像,以便在版本控制中将其推送到该映像时,它会生成映像并将该映像推送到Docker注册表。在gcloud的开头使用FROM circleci/node,然后像在Linux中一样通常安装Dockerfile。用您的注册表网址标记它,例如像gcloud一样,以便您可以推拉它(当然,请相应地替换您的用户名和注册表名称)。

然后,在CircleCI作业中,使用registry.gitlab.com/grant-isdale/gcloud-node代替registry.gitlab.com/grant-isdale/gcloud-node。如果注册表需要身份验证,则可以在此处添加身份验证详细信息。

答案 1 :(得分:0)

我只是需要自己完成一项业余爱好项目。我认为orb示例中列出的doAjaxprocess(.., handleSuccess, handleError, handleDone); 工作是一条红鲱鱼。如您所见,它将在自己的执行器中运行,并在您点击工作流程中的下一个作业时消失。

解决此问题的一种简单方法是运行gcp-cli/install command,作为gcp-cli/install_and_initialize_cli中的一个步骤。安装build_job CLI之后,就可以运行适当的auth和deploy命令。对于您而言,您可以执行以下操作:

gcloud

希望有帮助!