vlambda博客
学习文章列表

我是如何用Jenkins+Maven实现高效率参数化构建的?

| 次条有免费学习资料~


在我们执行自动化脚本的时候,经常我们需要在不同的环境之间切换,比如:测试环境 <-> 预发布环境 <-> 生产环境,而一般我们的代码上传到版本控制系统(Git or SVN),通过 Jenkins 持续集成构建我们的 job。

一旦环境发生了变化,又或者是我们要执行的用例集发生了变化,我们需要改动项目的配置,重新将代码上传至版本控制系统重新构建,整个流程下来比较浪费时间。

Jenkins 的参数化构建可以完美解决这一问题。


我是如何用Jenkins+Maven实现高效率参数化构建的?

Jenkins 参数化配置

我是如何用Jenkins+Maven实现高效率参数化构建的?


这里以 V2.264 Jenkins 版本 为例:
  • 进入任务配置页面->【General】

选择参数配置(Choice Parameter):

我是如何用Jenkins+Maven实现高效率参数化构建的?


  • 选择【构建】选项

如果选择的是 Maven 风格任务,

则配置如下:其中 ${ENV}表示引用 ENV 变量的值

我是如何用Jenkins+Maven实现高效率参数化构建的?


如果是选择freestyle(自由风格)任务,

选择【Execute Windows batch command】执行 Windows 批处理命令,填写如下配置,其中 %ENV% 表示读取 ENV 变量的值

我是如何用Jenkins+Maven实现高效率参数化构建的?



我是如何用Jenkins+Maven实现高效率参数化构建的?

Maven 项目配置

我是如何用Jenkins+Maven实现高效率参数化构建的?


Step1:

进入 Maven 的 pom.xml 文件中,在 project 标签下添加如下配置:

<!-- 不同的测试环境 -->
    <profiles>
        <!-- 开发环境 -->
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
        </profile>

        <!-- 测试环境 -->
        <profile>
            <id>test</id>
            <properties>
                <env>test</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

        <!-- 线上环境 -->
        <profile>
            <id>product</id>
            <properties>
                <env>product</env>
            </properties>
        </profile>
    </profiles>


Step2:

在 build 标签下添加如下配置:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>
<filters>
    <filter>src/main/filters/filter-${env}.properties</filter>

</filters>


Step3:

在项目 src/main/java 目录下新建 filters 目录,添加 filter-dev.properties、filter-product.properties、filter-test.properties 三支配置文件,配置内容参考:

Environment=dev
host=http://127.0.0.1
port=8081
jdbc-url=xxxx
jdbc-username=xxxx
jdbc-password=xxxx


 src/main/resources  目录下新建  application-maven.propertie 文件

server.port=${port}
# Environment
Environment=${Environment}
Host.url=${host}
# 数据源配置
datasource.url=${jdbc-url}
datasource.username==${jdbc-usernamel}
datasource.password==${jdbc-password}
datasource.driver-class-name=com.mysql.cj.jdbc.Driver



Step4:

在测试代码中读取配置

Properties properties = new Properties();
try {
    properties.load(ClassLoader.class.getResourceAsStream("/application-maven.properties"));
catch (IOException e) {
    e.printStackTrace();
}
String value = properties.getProperty("Environment");


这样即可通过不同的配置执行我们的自动化脚本。