无法将 gsutil cp 与 gitlab CI 一起使用

Posted

技术标签:

【中文标题】无法将 gsutil cp 与 gitlab CI 一起使用【英文标题】:Can't use gsutil cp with gitlab CI 【发布时间】:2021-08-19 16:27:40 【问题描述】:

我在 mac mini 服务器上使用 gitlab runner。 在使用名为“runner”的用户时,我设法使用了这个命令:

gsutil ls -l gs://tests/ |grep staging | sort -k 2 | tail -n 3| head -n 2 |awk 'print $3' | gsutil -m cp -I .

我设法获取文件,但是在 gitlab-ci.yml 中使用相同的命令,如下所示:

stages:
  - test
test:
  stage: test
  when: always
  script:
    - gsutil ls -l gs://tests/ |grep staging | sort -k 2 | tail -n 3| head -n 2 |awk 'print $3' | gsutil -m cp -I .

我得到错误:

bash: line 141: gsutil: command not found

我还检查了 gitlab runner 使用的是我使用的同一个用户。

gitlab runner 配置了shell executor。

更改命令以保存 gsutil 的完整路径也无济于事。

我在 gitlab-ci.yml 中添加了whoami,得到了同一个用户“runner”的结果

【问题讨论】:

即使运行器配置为使用 shell 执行器,它也以不同的用户身份运行:gitlab-runner。确保该用户有权访问gsutil。当您使用您的用户帐户登录时,whereis gsutilwhich gsutil 的输出是什么? 我忘了提到即使使用从which gsutil获得的完整路径也会发生此错误 【参考方案1】:

我设法通过使用这个解决方案解决了这个问题:

gcloud-command-not-found-while-installing-google-cloud-sdk

在使用 gsutil 命令之前,我将这 2 行包含在我的 gitlab-ci.yml 中。

source '[path-to-my-home]/google-cloud-sdk/path.bash.inc'
source '[path-to-my-home]/google-cloud-sdk/completion.bash.inc'

【讨论】:

以上是关于无法将 gsutil cp 与 gitlab CI 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Gitlab CI 运行 Cypress 测试

Gsutil 同步与 cp -n

gsutil cp 命令会影响我的带宽限制配额吗?

Docker 构建失败 - 带有 GKE 的 Gitlab CI。无法通过 tcp://localhost:2375 连接到 Docker 守护程序。 docker 守护进程是不是正在运行?

如何在忽略 .git、.gitignore 等文件的同时执行 gsutil cp -R?

如何将 Sonar Quality Gates 与 Gitlab-CI 集成