google-cloud-platform - 带有 Kaniko 和 gcloud sdk 的 Gitlab 运行器
问题描述
我想在 Gitlab 上构建 docker 镜像并使用 Kaniko。
当我只有来自 repo 的 Dockerfile 和代码时,它工作得很好。问题开始于在构建之前我想访问 GCP Secret Manager 并获取此构建的值。
我们直接在 Gitlab 上构建图像并将它们存储在 GCR.io 中。
下面的示例 gitlab-ci.yml 配置。当我们使用镜像时:Docker它将工作,因为我们可以使用 curl 等并安装云 sdk。但是对于 Kaniko,这是不可能的。
dev-build-docker:
stage: build-docker-image
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
environment: Develop
only:
changes:
- xxxxxxxxxxxx
refs:
- develop
services:
- docker:dind
before_script:
- source vars/.variables
- echo $CICD_SA_KEY > ${CI_PROJECT_DIR}/service_key.json
- export GOOGLE_APPLICATION_CREDENTIALS=${CI_PROJECT_DIR}/service_key.json
script:
- apk --no-cache add curl
- apk add bash
- curl https://sdk.cloud.google.com > install.sh
- apt install -y python3
- ./install.sh --disable-prompts
- export PATH=$PATH:/root/google-cloud-sdk/bin
- gcloud auth activate-service-account --key-file ${CI_PROJECT_DIR}/service_key.json
- mkdir creds
- gcloud secrets versions access latest --project=$projectid_dev --secret=xxxxxxxx > creds/dbpass
- DB_PASS=$(cat creds/dbpass)
- gcloud secrets versions access latest --project=$projectid_dev --secret=xxxxxxxxxx-key > creds/creds.2.json
- gcloud secrets versions access latest --project=$projectid_dev --secret=zzzzzzzzzzzzzz-key > creds/creds.1.json
# end of gcloud
- /kaniko/executor --context "$(pwd)" --dockerfile "$(pwd)/Dockerfile" --destination eu.gcr.io/$projectid_dev/xxxxxxxxxxxx:$TAG --destination eu.gcr.io/$projectid_dev/xxxxxxxxxxxx:latest --build-arg NODE_ENV=production --build-arg DB_PASS=$DB_PASS
Kaniko 正在使用busybox,我看不到安装gcp sdk 和访问机密的方法。在 Kaniko executor 之前,有没有人设法使用 gcloud 命令?
解决方案
由于 的性质kaniko
,您正在寻找的方法是不可能的。您已经注意到的主要原因是,busybox 的工具集有限,无法 gcloud
使用其依赖项进行安装。
例如,假设您下载了存档版本gcloud
并创建了自己的kaniko
版本来复制 Cloud SDK 二进制文件,但随后您注意到您还需要 python,这意味着编译它,这导致您需要更多的库和依赖项,这些库和依赖项位于结束似乎不太方便,而且制作kaniko
了一个很大的图像。
所以最后似乎最好的选择是使用 Docker in Docker 方法。另一个意味着额外步骤的解决方法是构建您自己的 kaniko 图像,其中包含您的秘密,例如:
FROM gcr.io/google.com/cloudsdktool/cloud-sdk as secrets
WORKDIR /creds
COPY ./key.json .
RUN gcloud auth activate-service-account --key-file=/secrets/key.json
WORKDIR /secrets
RUN gcloud secrets versions access latest --project=PROJECT_ID --secret=SECRET > creds_2.json
FROM gcr.io/kaniko-project/executor:debug
WORKDIR /build
COPY --from=secrets /secrets/creds_2.json .
推荐阅读
- powershell - 在 Powershell 中返回 Yes 或 No 而不是 True 或 False
- javascript - 使用多个 .then 更正 JavaScript 的评估顺序
- vb.net - C1FlexGrid 从单元格复选框中获取值
- macos - 如何登录詹金斯我不记得凭据 MACOS
- android - Android Room open close 练习是一种不好的做法吗?
- laravel - 当我在我的 Laravel 视图上使用“/js/app.js”时,我的 Bootstrap 没有加载
- python - python中的simpledialog.SimpleDialog,带有2个输入H
- sqlite - 在现有的 sqlite 表中创建主键
- java - Qt 事件卡在 Windows 10 64 位的 Eclipse RCP 应用程序 Java 插件中运行?
- mysql - 使用 Mysql 进行 Spring Data 地理空间查询