我是Java和Jenkins的新手,但拥有强大的C#MVC,TFSBuild和Octopus Deploy背景。 在Octopus Deploy中,可以读取MVC Web.Config XML文件并替换数据库连接字符串 - 这样可以轻松获取构建的工件并将其提升到不同的内部VM环境。我想用Java和Jenkins实现相同的净效果。
我是否认为可以/应该在每个VM环境的环境变量中设置数据库的Java连接字符串? 是否有一个可以为我实现此目的的Jenkins插件,还是需要编写PowerShell脚本?
我找到了几个链接,例如CloudBees,但它们似乎都适用于云提供商;我只想针对内部虚拟机。
使用SpringBatch,Maven,DB连接到Oracle。
答案 0 :(得分:1)
您也可以尝试使用不同的maven配置文件来构建适合测试的特定工件,但不建议这样做。您应该测试一个与生产中的版本尽可能接近的系统版本。
所以,是的,环境变量是最便携的方式。一个强大的Jenkins插件来控制它们是EnvInject。您可以将特定变量定义为将在构建过程中注入的简单键值对。
由于您使用的是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进程的人都可以访问db凭据。如果你坚持使用属性,你也可以使用属性文件传递它们,Spring seems to support。问题是你必须为每个环境维护单独的配置文件,我认为这会增加构建过程的开销,这可能更简单。
答案 1 :(得分:1)
由于您没有准确指定数据库是什么以及服务器是什么,因此我将给出tomcat,mysql和spring配置的示例。有关tomcat jndi-datasource-examples的更多信息,请将sql驱动程序添加到tomcat的lib中。
在您的tomcat_root / conf文件夹下的server.xml中,在上下文中添加连接字符串
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest"/>
在您的web.xml中添加以下资源参考
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在弹簧配置中添加以下内容
<beans:bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="java:comp/env/jdbc/TestDB"/>
</beans:bean>
现在您可以将数据源bean自动装配或添加为其他数据服务bean的参考资料。
@Autowired
private DataSource dataSource;