gpt4 book ai didi

java - 如何为每个部署目标指定 Jenkins 部署配置

转载 作者:行者123 更新时间:2023-12-02 03:45:59 27 4
gpt4 key购买 nike

我是 Java 和 Jenkins 的新手,但拥有强大的 C# MVC、TFSBuild 和 Octopus Deploy 背景。在 Octopus Deploy 中,可以读取 MVC Web.Config XML 文件并替换数据库连接字符串 - 这使得可以轻松地将构建的工件升级到不同的内部 VM 环境。我想用 Java 和 Jenkins 实现相同的最终效果。

我认为数据库的 Java 连接字符串可以/应该在每个虚拟机环境的环境变量中设置是否正确?是否有 Jenkins 插件可以为我实现此目的,或者我需要编写 PowerShell 脚本吗?

我找到了几个链接,例如 CloudBees但它们似乎都是特定于云提供商的;我只想定位内部虚拟机。

使用 SpringBatch、Maven、DB 连接到 Oracle。

最佳答案

您还可以尝试使用不同的 Maven 配置文件来构建适合测试的特定工件,但不建议这样做。您应该测试与生产版本尽可能接近的系统版本。

所以,是的,环境变量是实现此目的最便携的方法。一个强大的 Jenkins 插件来控制它们是 EnvInject 。您可以将特定变量定义为将在构建过程中注入(inject)的简单键值对。

<小时/>

编辑

由于您使用的是 Spring Batch,因此您可以使用 xml 文件或编程配置来设置数据库连接。配置文件仅支持系统属性,因此您可以这样做:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value="${db.url}" />
<property name="username" value="${db.user}" />
<property name="password" value="${db.password}" />
<!-- drivers and other stuff -->
</bean>

对于编程配置(您可以查看完整的示例 here ),您也可以使用系统属性:

@Bean
public DataSource someDataSource() throws SQLException {
final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setUrl(System.getProperty("db.url"));
dataSource.setUsername(System.getProperty("db.user"));
dataSource.setPassword(System.getProperty("db.password"));
// Driver, connection properties, if any, and other stuff
return dataSource;
}

还有环境变量:

dataSource.setUrl(System.getenv("db.url"));
dataSource.setUsername(System.getenv("db.user"));
dataSource.setPassword(System.getenv("db.password"));

您可以使用 EnvInject 插件设置环境变量,但如果您使用系统属性,传递它们的最简单方法是作为命令行参数:java ... -Ddb.url=something -Ddb.user=foo -Ddb.password=bar。但请注意,任何能够列出该 java 进程的人都可以访问数据库凭据。如果您坚持属性,您还可以使用属性文件传递它们,Spring seems to support 。问题是您必须为每个环境维护单独的配置文件,我认为这会增加本可以更简单的构建过程的大量开销。

关于java - 如何为每个部署目标指定 Jenkins 部署配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com