使用 Google Cloud Build,我如何 运行 一个执行 docker 和 kubectl 命令的 Makefile?
With Google Cloud Build, how do I run a Makefile that executes docker and kubectl commands?
我收到了一个项目,该项目由 Makefile
个 运行 个 docker
个命令组成。我想在 Cloud Build 上构建它。
我知道 Cloud Build 本机处理 Docker,但必须使用现有的 Makefile 结构。
我尝试了 make Custom Build step,但由于缺少 docker
和 kubectl
,Cloud Build 失败了。所以我可以将它们添加到 make 自定义构建步骤的 Dockerfile
中,但似乎这是错误的,因为那时 make 运行s Docker-in-Docker 这会导致问题——例如,缺少 gcloud
和 kubectl
权限和上下文。
作为此类 Makefile 的一小部分,这里是一个调用 docker build
和 docker push
.
的目标
build/myapp/deployer: ...
docker build \
--build-arg REGISTRY="$(REGISTRY)/myapp" \
--tag "$(APP_DEPLOYER_IMAGE)" \
-f deployer/Dockerfile \
.
docker push "$(APP_DEPLOYER_IMAGE)"
@touch "$@"
如何在 Cloud Build 中 运行 这些 Makefile?
要回答您的评论:"How to run docker inside a docker container?",您必须像 运行ner 一样看待您的自定义云生成器。您可以在 Cloud Build
中像这样使用它
- steps:
- name: gcr.io/your-project/your-custom-builder
entrypoint: "bash"
args:
- "-c"
- |
Makefile
<All the script lines that you want which use binaries installed in your custom builder>
这里是自定义 Cloud Builder 运行 命令,但结果存储在您的 Cloud Build 工作区中,而不是自定义 Cloud Builder 容器中。
我收到了一个项目,该项目由 Makefile
个 运行 个 docker
个命令组成。我想在 Cloud Build 上构建它。
我知道 Cloud Build 本机处理 Docker,但必须使用现有的 Makefile 结构。
我尝试了 make Custom Build step,但由于缺少 docker
和 kubectl
,Cloud Build 失败了。所以我可以将它们添加到 make 自定义构建步骤的 Dockerfile
中,但似乎这是错误的,因为那时 make 运行s Docker-in-Docker 这会导致问题——例如,缺少 gcloud
和 kubectl
权限和上下文。
作为此类 Makefile 的一小部分,这里是一个调用 docker build
和 docker push
.
build/myapp/deployer: ...
docker build \
--build-arg REGISTRY="$(REGISTRY)/myapp" \
--tag "$(APP_DEPLOYER_IMAGE)" \
-f deployer/Dockerfile \
.
docker push "$(APP_DEPLOYER_IMAGE)"
@touch "$@"
如何在 Cloud Build 中 运行 这些 Makefile?
要回答您的评论:"How to run docker inside a docker container?",您必须像 运行ner 一样看待您的自定义云生成器。您可以在 Cloud Build
中像这样使用它- steps:
- name: gcr.io/your-project/your-custom-builder
entrypoint: "bash"
args:
- "-c"
- |
Makefile
<All the script lines that you want which use binaries installed in your custom builder>
这里是自定义 Cloud Builder 运行 命令,但结果存储在您的 Cloud Build 工作区中,而不是自定义 Cloud Builder 容器中。