我有一个多模块spring-boot项目,在对我的应用程序进行集成测试之前,我启动了另一个子模块(这是另一个spring boot应用程序制作的Stub),您可以看到它已附加到“ pre-integration-test”并且一切正常。
Parent Pom
|
|----myRealApp module(spring boot app)
|----stub module(This is also a spring-boot app)
我的问题是,是否有一种方法可以随机化并共享此端口(不固定为8090),因此在Jenkins服务器上进行的并发构建可以运行测试并且不会失败,因为地址已在使用中。
我知道我可以在spring属性文件中生成随机数/端口。但是找不到将其传递给Pom的方法。
myRealApp的application-test.properties :
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>
答案 0 :(得分:2)
您可以通过詹金斯Port Allocator Plugin
一旦分配了端口(让我们说$user->mentorAssigned()
),就可以将其作为命令行传递
import pandas as pd
import numpy as np
import scipy.stats as sp
df = pd.DataFrame(np.random.randint(1,10,(5)))
df_w = df.rolling(window=3, min_periods=1)
m1 = df_w.apply(lambda x: np.mean(x))
m2 = df_w.mean()
s1 = df_w.apply(lambda x: np.std(x))
s2 = df_w.std()
sk1 = df_w.apply(lambda x: sp.skew(x))
sk2 = df_w.skew()
答案 1 :(得分:0)
我建议您不要完全随机化。我的建议是对POM和application-test.properties文件中的服务器端口进行参数设置,并根据一些詹金斯提供的变量设置一个值:例如BUILD_NUMBER
,该变量在每次构建时都会增加,因此唯一性是保证。
但是,这存在一个问题:您还需要将端口号包含在有效边界之内:TCP端口必须在1024和65535之内,但是BUILD_NUMBER
不限于全部。
如何应对?我认为绑定到initialize
阶段的简单Ant任务可以读取BUILD_NUMBER
的值,将其应用一个简单的公式1024+(BUILD_NUMBER % 64512)
并将其设置为确定的端口号变量,即您将在POM和application-test.properties文件中进行引用。