timfeirg / lain-cli

DevOps with minimum effort.
https://lain-cli.readthedocs.io/en/latest/
MIT License
31 stars 9 forks source link

pass system env to docker build #64

Closed timfeirg closed 2 years ago

timfeirg commented 2 years ago

docker build 如果要透传系统 env, 需要类似下方的写法:

ARG FOO
ENV FOO=$FOO
# docker build --build-arg FOO=${FOO}

因此目前 lain build 并不支持将系统 env 传入 docker build, 需要在其上做解析和参数适配才行.

开发方案

lain 会对 prepare.env / build.env 做解析, 将所有 ${xxx} 式的变量都拿出来, 然后对照系统 env 做检查, 然后作为 --build-arg 进行透传.

另外, 这也表明目前文档里提供的 build.env 示范是个错误写法, 实际上目前并不会自动获取 system env.

@kxxoling

timfeirg commented 2 years ago

解析变量的时候, 规则可参考 docker build 的 expansion process: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/shell/lex.go#L312