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

时间:2016-03-29 14:31:37

标签: java jenkins continuous-integration jenkins-plugins

我是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。

2 个答案:

答案 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;