jenkins 使用几个因客户端和环境而异的ENV管理Docker映像的好方法?

sulc1iza  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(129)

因此,我和DevOps团队正在与一个日益严重的问题作斗争:我们的前端Docker映像需要几个构建时环境变量(这意味着它们需要在操作系统级别上,而不是在云上进行参数化),它们由ARG语句捕获,并通过传递docker build -t project --build-arg ...分配给管道上的ENV或本地构建的ENV(因为所有ENV都存储在层的元数据中,所以存在安全问题,因此可以使用docker history查看)。但随着项目的不断发展,它对DevOps团队的依赖性也越来越大,因为他们需要始终使用新的ARG和不同的价值观来更新管道,这些价值观不仅因客户而异,(在生产中)还包括环境(我们有通常的dev、stage、prod),因此开发和stage环境不会中断,我不能提供太多的细节,但简而言之,一些变量是特性切换,其他变量包含云证书、框架内容,我已经尝试过使用--mount=type=secret...,但是它并不理想,因为前端运行时需要它们。将env_file传递给build命令看起来是最好的主意,但是如何保证文件的安全性和前端团队的可管理性呢?另外,这里不能选择编写,我们的管道不使用它来编排containter,我想它也会属于同一个文件问题。我们有一个想法,即以某种方式提交加密的env文件,并以某种方式通过git钩子或其他方式来完成此过程,然后用一个私钥访问管道中的内容。听起来不太花哨。无论如何,这里非常感谢帮助和想法!

af7jpaap

af7jpaap1#

您可以在HashiCorp Vault中将变量作为秘密进行管理。
如果您使用的是HashiCorp Vault,您可以在dockerfile中ARG Vault的ip/port/token,并在dockerfile本身的变量中使用Vault API获取秘密(RUN命令),效果很好。如果您想将变量设置为环境变量,则在从Vault中获取后将其存储在.bashrc或/etc/profile文件中。

相关问题