You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket Pipeline无法传递已安装GCloud命令,报错‘gcloud: command not found’

问题原因

Bitbucket Pipeline 的每个 step 都是独立运行的 Docker 容器,前一个 step 中安装的软件、配置的环境变量只会存在于当前容器中,不会自动传递到后续 step。你在第一个 step 里安装的 Google Cloud SDK(包括gcloud、kubectl、gsutil)只在第一个容器中有效,后续 step 启动的是全新容器,自然找不到这些命令。

解决方案

推荐以下两种最直接的解决方式:

方式一:使用预安装 Google Cloud SDK 的基础镜像

直接替换所有需要用到 GCSDK 的 step 的基础镜像为官方预装好 GCSDK(含kubectl、gsutil)的版本,省去手动安装步骤,且所有 step 环境一致。

修改后的配置示例

# 用带 Python 3.7 和 GCSDK 的镜像作为基础镜像
image: google/cloud-sdk:3.7-slim

pipelines:
  default:
    - step:
        name: Configure Google Cloud SDK
        script:
          - export BUILD_TAG=stage-xxx:$BITBUCKET_BUILD_NUMBER
          - echo $GCLOUD_API_KEYFILE | base64 -d > ${HOME}/gcloud-service-key.json
          - gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json
          - gcloud config set project $PROJECT_ID
          - gcloud config list
          # 无需手动安装 kubectl/gsutil,镜像已自带

    - step:
        name: Build Docker image and push to GCR
        services:
          - docker
        script:
          - export BUILD_TAG=stage-kredily:$BITBUCKET_BUILD_NUMBER
          - gcloud container clusters get-credentials gke-xxx-xxx-as1-service-01 --zone asia-south1-a --project prj-srv-xxx-xxx-01
          - gsutil -m rm -r gs://bkt-xxx-static-files-01/static/*
          - gsutil -m rsync -r static/ gs://bkt-xxxx-static-files-01/static/
          - docker build -t asia-south1-docker.pkg.dev/prj-srv-xxxx-beta-01/repo-xxxx-stage-as1-01/$BUILD_TAG .
          - gcloud auth configure-docker asia-south1-docker.pkg.dev
          - docker push asia-south1-docker.pkg.dev/prj-srv-xxxx-beta-01/repo-xxxx-stage-as1-01/$BUILD_TAG

    - step:
        name: Deploy to QA App Server
        # 复用官方 GCSDK 镜像,已自带 kubectl
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli:alpine
        script:
          # 先完成 GCP 认证和集群凭证获取
          - gcloud auth activate-service-account --key-file=<(echo $GCLOUD_API_KEYFILE | base64 -d)
          - gcloud config set project $PROJECT_ID
          - gcloud container clusters get-credentials gke-xxx-xxx-as1-service-01 --zone asia-south1-a --project prj-srv-xxx-xxx-01
          # 修正原命令中 latest 后的多余短横线
          - kubectl set image deployment/xx-app xx-app=asia-south1-docker.pkg.dev/prj-srv-xx-beta-01/repo-xx-stage-as1-01/stage-xx:latest --record --namespace=xx-beta

方式二:将安装与使用步骤合并

如果必须使用原基础镜像,可把安装 GCSDK 的逻辑合并到每个需要用到它的 step 中(因为每个 step 是独立容器,需要重新安装)。

修改后的配置示例(以构建镜像 step 为例)

image: python:3.7

pipelines:
  default:
    - step:
        name: Build Docker image and push to GCR
        services:
          - docker
        script:
          - export BUILD_TAG=stage-kredily:$BITBUCKET_BUILD_NUMBER
          # 在当前 step 中重新安装 GCSDK
          - echo $GCLOUD_API_KEYFILE | base64 -d > ${HOME}/gcloud-service-key.json
          - apt-get update && apt-get install -y curl
          - curl https://sdk.cloud.google.com | bash -s -- --disable-prompts --install-dir=/usr/local/gcloud
          - export PATH=$PATH:/usr/local/gcloud/google-cloud-sdk/bin
          - gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json
          - gcloud config set project $PROJECT_ID
          - gcloud components install kubectl gsutil
          # 执行原有的构建推送逻辑
          - gcloud container clusters get-credentials gke-xxx-xxx-as1-service-01 --zone asia-south1-a --project prj-srv-xxx-xxx-01
          - gsutil -m rm -r gs://bkt-xxx-static-files-01/static/*
          - gsutil -m rsync -r static/ gs://bkt-xxxx-static-files-01/static/
          - docker build -t asia-south1-docker.pkg.dev/prj-srv-xxxx-beta-01/repo-xxxx-stage-as1-01/$BUILD_TAG .
          - gcloud auth configure-docker asia-south1-docker.pkg.dev
          - docker push asia-south1-docker.pkg.dev/prj-srv-xxxx-beta-01/repo-xxxx-stage-as1-01/$BUILD_TAG

    - step:
        name: Deploy to QA App Server
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli:alpine
        script:
          - gcloud auth activate-service-account --key-file=<(echo $GCLOUD_API_KEYFILE | base64 -d)
          - gcloud config set project $PROJECT_ID
          - gcloud container clusters get-credentials gke-xxx-xxx-as1-service-01 --zone asia-south1-a --project prj-srv-xxx-xxx-01
          - kubectl set image deployment/xx-app xx-app=asia-south1-docker.pkg.dev/prj-srv-xx-beta-01/repo-xx-stage-as1-01/stage-xx:latest --record --namespace=xx-beta
注意事项
  • 方式一的效率更高,避免重复安装依赖,是官方推荐的最佳实践;
  • 所有 step 中需要用到 GCP 资源的,都要确保完成认证和项目配置(如gcloud auth activate-service-account、gcloud config set project);
  • 原部署 step 中的命令latest--record存在语法错误,需修正为latest --record。

内容的提问来源于stack exchange,提问作者Jarvis Reacher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:15:00