如何 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