【问题标题】:With Google Cloud Build, how do I run a Makefile that executes docker and kubectl commands?使用 Google Cloud Build,我如何运行执行 docker 和 kubectl 命令的 Makefile?
【发布时间】:2020-03-22 20:49:43
【问题描述】:

我收到了一个由多个Makefiles 构建的项目,这些@s 运行许多docker 命令。我想在 Cloud Build 上构建它。

我知道 Cloud Build 原生处理 Docker,但必须使用现有的 Makefile 结构。

我尝试了make Custom Build step,但由于缺少dockerkubectl,Cloud Build 失败了。所以我可以将这些添加到 make 自定义构建步骤的Dockerfile 中,但这似乎是错误的,因为 make 运行 Docker-in-Docker 而这个导致问题 - 例如,gcloudkubectl 权限和上下文丢失。

作为此类 Makefile 的一小部分,这里有一个调用 docker builddocker 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?

【问题讨论】:

  • 你能提供这个makefile的代码示例吗?
  • 我添加了一个小样本。
  • 好的,你的makefile只是一个bash脚本,不是吗?
  • 对,make 只是运行一些命令,主要是 docker build 和 docker push。但是,make的依赖结构复杂,所以我宁愿保留它
  • 您确实实现了一个自定义构建器,其中包含 Docker Gcloud 和 kubectl?

标签: docker makefile google-cloud-build docker-in-docker


【解决方案1】:

要回答您的评论:“如何在 docker 容器中运行 docker?”,您必须像跑步者一样看待您的自定义云构建器。您可以在 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 容器中。

【讨论】:

  • Docker-in-docker 让事情变得复杂。例如,docker/kubectl 没有预先配置合适的服务用户。此外,他们在访问文件系统时遇到问题。
  • guillaume blaquiere:也许这是一个更好的问题:我们如何使用在 Cloud Build 过程中计算的参数:stackoverflow.com/questions/59118037/h
猜你喜欢
  • 2018-05-20
  • 2013-09-23
  • 2021-09-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 2021-03-27
相关资源
最近更新 更多