docker 中的 Jenkins Pipeline gcloud 问题

问题描述 投票:0回答:2

我正在尝试根据以下内容设置詹金斯管道 this文章,而是使用谷歌容器注册表将docker镜像推送到。

问题:让我失望的部分是这个 jenkinsfile 阶段块

stage ('Push Docker Image To Container Registry') {
  docker.image('google/cloud-sdk:alpine').inside {
      sh "echo ${env.GOOGLE_AUTH} > gcp-key.json"
      sh 'gcloud auth activate-service-account --key-file ./service-account-creds.json'
  }
}

错误:

Please verify that you have permissions to write to the parent directory.)

ERROR: (gcloud.components.update) Could not create directory [/.config/gcloud]: Permission denied.

我无法运行任何与 gcloud 相关的命令,因为我一直收到上述错误。

我尝试创建手动登录到aws实例的“/.config”目录并向所有人开放该文件夹的权限,但这也没有帮助。

我也找不到任何地方如何使用docker为jenkins管道正确设置谷歌云。

非常感谢任何建议:)

docker jenkins jenkins-pipeline google-authentication google-container-registry
2个回答
0
投票

看起来它正在尝试将数据直接写入您的根文件系统目录。 gcloud 的 .config 目录通常位于用户名和/或 root 用户的以下位置:

/home/yourusername/.config/gcloud
/root/.config/gcloud

看起来,出于某种原因,jenkins 认为父目录应该位于 / 中。

我会尝试检查您运行此程序的计算机上的云 SDK 配置目录(以及脚本运行的用户):

$ sudo find / -iname "gcloud"

并寻找与上面打印的位置类似的位置。

难道Cloud SDK安装在机器上非标准位置?


0
投票

所以问题是,当 Jenkins 运行 docker 容器时,它会传递主机上用户的用户 ID,例如:

docker run -t -d -u 501:501 \
  -w /home/worker/workspace/vcg-gcp-image-build \
  -v /home/worker/workspace/vcg-gcp-image-build:/home/worker/workspace/vcg-gcp-image-build:rw,z \
  -v /home/worker/workspace/vcg-gcp-image-build@tmp:/home/worker/workspace/vcg-gcp-image-build@tmp:rw,z \
  -e CLOUDSDK_CONFIG=/tmp/.config/gcloud \
  -e ******** \
  ...

该用户(在本例中为

501
)可能不存在于docker容器上,因此它实际上没有主目录或类似的东西,但它以普通用户身份运行,而不是
root
,所以它赢了没有权限写信给
/
(或者特别是
/.config/gcloud
)。我认为用户将有权
/home/worker/...
;然而,对我来说似乎并非如此。

我通过将

CLOUDSDK_CONFIG = '/tmp/.config/gcloud'
设置为管道的环境变量,然后传递
args "-e CLOUDSDK_CONFIG=${CLOUDSDK_CONFIG}"
告诉
gcloud
使用不同的目录来解决这个问题。
我们的管道看起来像这样:

CLOUDSDK_CONFIG

看起来我迟到了 6 年多才来帮助你,但希望这对未来的其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.