Shell 在单独步骤中执行时未找到gsutil命令-bitbucket管道 图像:节点:14.15.4 管道: 分支机构: “安装步骤”: -步骤: 名称:安装Gcloud并传输文件 脚本: -echo“开始构建” - -步骤: 名称:gsutil执行 脚本: -gsutil cp

Shell 在单独步骤中执行时未找到gsutil命令-bitbucket管道 图像:节点:14.15.4 管道: 分支机构: “安装步骤”: -步骤: 名称:安装Gcloud并传输文件 脚本: -echo“开始构建” - -步骤: 名称:gsutil执行 脚本: -gsutil cp,shell,gcloud,bitbucket-pipelines,gsutil,Shell,Gcloud,Bitbucket Pipelines,Gsutil,我面临的问题是,如果我将gsutil放在一个单独的步骤中,就会出现错误gsutil:command not found。如果我把它放在安装gcloud的脚本中,效果会很好。请帮助。我最初认为包含gsutil可执行文件(/bin/)的目录可能不在运行命令时使用的路径中。您可以通过在两种情况下运行echo$PATH并比较它们来验证这一点 但是,在查看bitbucket文档之后,您似乎需要将在一个步骤中生成的文件(例如,您安装的gcloud文件)声明为“工件”,以便在后续步骤中使用它们 您的第二步将失

我面临的问题是,如果我将gsutil放在一个单独的步骤中,就会出现错误gsutil:command not found。如果我把它放在安装gcloud的脚本中,效果会很好。请帮助。

我最初认为包含gsutil可执行文件(
/bin/
)的目录可能不在运行命令时使用的
路径中。您可以通过在两种情况下运行
echo$PATH
并比较它们来验证这一点

但是,在查看bitbucket文档之后,您似乎需要将在一个步骤中生成的文件(例如,您安装的gcloud文件)声明为“工件”,以便在后续步骤中使用它们


您的第二步将失败,因为:

管道中的每个步骤都运行一个单独的Docker容器。如果需要,可以通过选择不同的图像为每个步骤使用不同类型的容器

例如,如果希望第二步访问“file.txt”,则需要将其定义为工件

工件:
-文件/*.txt
要声明
gcloud
,如下所示。但是,您还需要考虑其他依赖关系,包括设置<代码>路径< /> >

-步骤:
名称:安装Gcloud并传输文件
脚本:
-echo“开始构建”
- 
人工制品:
-/usr/lib/googlecloudsdk/**
. . .
因为每个步骤都在Docker容器中运行,所以如果需要,还可以为每个步骤声明不同的容器。您可以使用GoogleSDK Docker映像来确保依赖项是正确的

-步骤:
名称:安装Gcloud并传输文件
图片:google/CloudSDK:160.0.0
脚本:
-npm安装
-npm试验
-npm运行构建
人工制品:
-文件/发送/传输

好的,谢谢你的回答。一个问题是,如果我将文件保留为工件,那么下一步如何执行gsutil命令??。Andrew的回答更详细地介绍了如何执行此操作,但总体思路是:在后续步骤中,您需要使用gsutil的绝对路径(而不仅仅是
gsutil
)调用gsutil,或者导出
path
环境变量,这样,在运行其他命令之前,它包括包含gsutil可执行文件的目录。
image: node:14.15.4
pipelines:
branches:
'INSTALL STEP':
  - step:
      name: Install Gcloud and transfer files
      script:
        - echo "starting build"
        - <<I INSTALL GCLOUD HERE FROM A SEPERATE SH FILE, ALSO PATHS ARE SET>>
  - step:
      name: gsutil execution
      script:
        - gsutil cp <<some code goes here>>