如何 share/pass 具有应用程序属性和 pom 文件的变量
How to share/pass a variable with application properties and pom file
我有一个多模块 spring-boot 项目,在我的应用程序集成测试之前,我启动了另一个子模块(这是另一个 spring 启动应用程序制作的存根)你可以看到它附加到 "pre-integration-test" 和 它最终工作正常 。
Parent Pom
|
|----myRealApp module(spring boot app)
|----stub module(This is also a spring-boot app)
我的问题是,有没有办法随机化并共享此端口(不固定为 8090),因此 Jenkins 服务器上的并发构建可以 运行 测试并且不会失败,因为地址已经在使用中。
我知道我可以在 spring 属性文件中生成随机 numbers/ports。但是找不到将其传递给 Pom 的方法。
应用-test.properties myRealApp:
stub.port=8090
stub.url=http://localhost:${stub.port}/stub/api/v1/domains/
myRealApp 的 Pom:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${spring.boot.mainclass}</mainClass>
</configuration>
<executions>
<execution>
<id>start-stub</id>
<configuration>
<arguments>
<argument>--server.port=8090</argument>
</arguments>
<mainClass>io.swagger.Stub</mainClass>
<classesDirectory>../my-stub/target/classes</classesDirectory>
</configuration>
<goals>
<goal>start</goal>
</goals>
<phase>pre-integration-test</phase>
</execution>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
我建议你根本不要随机化。我的建议是在 POM 和 application-test.properties 文件中参数化服务器端口,并根据 Jenkins 提供的一些变量设置一个值:例如,BUILD_NUMBER
,它在每次构建时递增,因此保证唯一性。
但是,这有一个问题:您还需要将端口号包含在有效边界内:TCP 端口必须在 1024 和 65535 之间,但是 BUILD_NUMBER
完全没有限制。
如何应对?我认为绑定到 initialize
阶段的简单 Ant 任务可以读取 BUILD_NUMBER
值,将其应用一个简单的公式 1024+(BUILD_NUMBER % 64512)
,并将其设置为确定的端口号变量,这是一个您将在 POM 和 application-test.properties 文件中引用。
你可以通过 jenkins 做到这一点 Port Allocator Plugin
一旦你分配了端口(比方说HTTP_PORT
),你就可以将其作为命令行传递
-Dstub.port=$HTTP_PORT
我有一个多模块 spring-boot 项目,在我的应用程序集成测试之前,我启动了另一个子模块(这是另一个 spring 启动应用程序制作的存根)你可以看到它附加到 "pre-integration-test" 和 它最终工作正常 。
Parent Pom
|
|----myRealApp module(spring boot app)
|----stub module(This is also a spring-boot app)
我的问题是,有没有办法随机化并共享此端口(不固定为 8090),因此 Jenkins 服务器上的并发构建可以 运行 测试并且不会失败,因为地址已经在使用中。
我知道我可以在 spring 属性文件中生成随机 numbers/ports。但是找不到将其传递给 Pom 的方法。
应用-test.properties myRealApp:
stub.port=8090
stub.url=http://localhost:${stub.port}/stub/api/v1/domains/
myRealApp 的 Pom:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${spring.boot.mainclass}</mainClass>
</configuration>
<executions>
<execution>
<id>start-stub</id>
<configuration>
<arguments>
<argument>--server.port=8090</argument>
</arguments>
<mainClass>io.swagger.Stub</mainClass>
<classesDirectory>../my-stub/target/classes</classesDirectory>
</configuration>
<goals>
<goal>start</goal>
</goals>
<phase>pre-integration-test</phase>
</execution>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
我建议你根本不要随机化。我的建议是在 POM 和 application-test.properties 文件中参数化服务器端口,并根据 Jenkins 提供的一些变量设置一个值:例如,BUILD_NUMBER
,它在每次构建时递增,因此保证唯一性。
但是,这有一个问题:您还需要将端口号包含在有效边界内:TCP 端口必须在 1024 和 65535 之间,但是 BUILD_NUMBER
完全没有限制。
如何应对?我认为绑定到 initialize
阶段的简单 Ant 任务可以读取 BUILD_NUMBER
值,将其应用一个简单的公式 1024+(BUILD_NUMBER % 64512)
,并将其设置为确定的端口号变量,这是一个您将在 POM 和 application-test.properties 文件中引用。
你可以通过 jenkins 做到这一点 Port Allocator Plugin
一旦你分配了端口(比方说HTTP_PORT
),你就可以将其作为命令行传递
-Dstub.port=$HTTP_PORT