【问题标题】:How to handle code for different environments如何处理不同环境的代码
【发布时间】:2020-02-01 23:00:44
【问题描述】:

我正在开发一个 java (maven) 项目,其中开发/测试环境中的代码与生产环境中的代码不同。不同的部分主要是配置文件或与 Docker 相关的文件,但这仍然会造成很多混乱。如果我要保留 pom 文件或 prod 的 Dockerfile,dev 将无法工作,反之亦然。

现在,在部署到 prod 时, 我从现有的deploy 分支在 git 中创建了一个新分支,该分支已经具有不同的 Dockerfile 和 pom。

在那里,我从 src/ 目录中检查更改,例如

$ git checkout origin/feature-name —- src/

并在必要时手动提供对其余文件的任何其他更改。

所有这些过程变得乏味,很多可能的错误指日可待(假设我忘记更改依赖项的版本)。此外,这阻止了我将部署自动化到生产环境。我该如何解决这种情况?

更新

src/ 目录中的实际代码没有改变。环境之间的变化是

  • dev/test 环境使用 secret,但 prod 不使用,这意味着不同的 docker-compose 文件和不同的入口点
  • 生产中的 pom 文件具有其他元素(即指向私有工件的父级)。正如@Saeed 所提到的,使用配置文件不能添加/更改或元素。​​
  • 生产中的 Dockerfile 使用在开发(或测试)期间无法访问的私有映像,而我使用的是公共等效映像。

【问题讨论】:

  • 如果您的测试代码库和生产代码库不同,您如何实际测试要运送到生产环境的代码?我会先尝试解决这个问题;您自然会有不同的配置(副本数、数据库设置、主机名),但实际的 代码 应该是相同的。在 Docker 上下文中,您应该在所有环境中运行相同的单个映像。
  • 我已经用一组环境之间的差异更新了这个问题。我希望这会有所帮助

标签: git docker dockerfile maven-3 continuous-deployment


【解决方案1】:

我认为 Maven 配置文件是创建自定义构建配置的不错选择,例如针对测试粒度级别或特定部署环境。

根据 Maven documentation,配置文件可以自定义 POM 的以下元素

<repositories>
<pluginRepositories>
<dependencies>
<plugins>
<properties> (not actually available in the main POM, but used behind the scenes)
<modules>
<reporting>
<dependencyManagement>
<distributionManagement>

&lt;build&gt; 元素的子集,包括:

<defaultGoal>
<resources>
<testResources>
<finalName>

对于不同的环境和目的,你可以拥有完全不同的设置文件,甚至依赖项、插件等

例如,在配置文件中,您可以将其配置为跳过测试:

<profile>
    <id>no-tests</id>
    <properties>
        <maven.test.skip>true</maven.test.skip>
    </properties>
</profile>

当您将配置文件名称传递给 Maven 并通过 -P 开关激活它时,Maven 将应用配置文件中定义的自定义,在本示例中通过运行:

mvn clean install -P no-tests

它将跳过正在运行的测试

Maven 配置文件真的很强大,如果你能很好地利用它,它可以处理高度自定义

【讨论】:

  • 非常感谢您的扩展回答。这是我的第一个想法,但不幸的是,除了我可以更改的 之外,还有其他一些我不能更改的元素。这些特定于生产环境,即 指向仅在生产中可用的信息。这是不可能的(如stackoverflow.com/questions/6507019/… 所述)。我希望我可以使用另一种解决方案,而不是保留两个单独的文件。
  • 关于其他stackoverflow问题中的scm提供的解决方案stackoverflow.com/questions/37893346/…
  • 还有关于多父项目你可以在这里查看stackoverflow.com/questions/1636801/…组合所有这些可能会解决你的问题
  • scm 的解决方案似乎很有希望,但父级仍然存在。这是因为新父级是在开发期间无法访问的私有工件,这会产生错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2014-04-12
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多