第一条规则:
不要向源代码管理提交密码
.
第二条规则:不要在应用程序源代码中硬编码主机名、用户名或密码。
一般来说,尝试遵循
12 factor application
模式。
开发、分段和生产环境的关键是,您可以在多个不同设置的地方运行相同的应用程序源代码。例如,我的日常开发工作流程如下:
-
我在本地进行开发,根本不涉及码头工人。我所有的数据库主机名都是
localhost
,密码是
password
. 我开发、运行本地测试、启动服务和测试,直到我认为它可以工作为止。
-
我构建组件的Docker映像并在本地部署它。这可能是本地Docker撰写安装程序,其中数据库主机名为
database
密码是
密码
.
-
我致力于源代码管理并将其推送到一个分支。我的同事回顾了一下。
-
我们的CI系统(实际上是Jenkins)构建我的组件,运行它的测试,并将其部署到测试环境中。有一个实际的数据库主机名和一个詹金斯注入的密码。
-
如果这一切都很好,并且组合系统在测试环境中工作,那么我合并了我的分支,并告诉Jenkins将其部署到生产环境中。这将使用一个具有真实主机名的非Docker数据库,以及Jenkins注入的密码。
所以:有时我在Docker中运行东西;有时我不运行;相同的应用程序代码在两个地方都可以工作。我不太担心一个环境可能使用与另一个不同的语言运行时补丁版本,并显式声明我的库依赖项(
package.json
,
Gemfile
,
setup.py
/
requirements.txt
,
等。
)我通过环境变量传入主机名和凭据,这是环境之间唯一的区别。