[带有Maven的WebSphere Liberty 19.0.0.8服务器中的CI / CD实现

问题描述 投票:0回答:1

正在使用Maven开发应用程序,它具有EJB层。我在WebSphere Liberty服务器中配置了数据源。所有事务都可以由服务器处理。我正在使用Jenkins来构建应用程序。我想创建CI / CD实现。为此,我尝试在应用程序中添加Junit测试。但是在进行Jenkins构建时无法连接数据库。因为在构建时没有通信黑白服务器和詹金斯。我如何创建无需数据库即可处理数据库连接和EJB的Junit。?

maven jenkins ejb websphere-liberty
1个回答
0
投票

您可以在此处使用的一个可能的解决方案是称为MicroShed Testing的集成测试库。它是为与JavaEE / MicroProfile应用服务器(如Liberty)进行集成测试而创建的,可用于运行外部资源(如数据库)的应用程序的测试。

MicroShed Testing非常适合在Docker容器内运行Liberty应用程序的情况。如果您在Docker中运行,则可以轻松编写一个如下所示的集成测试:

@MicroShedTest
@SharedContainerConfig(AppContainerConfig.class)
public class DatabaseTest {

    @Inject
    public static MyJAXRSEndpoint personSvc;

    @Test
    public void testGetPerson() {
        Long bobId = personSvc.createPerson("Bob", 24);
        Person bob = personSvc.getPerson(bobId);
        assertEquals("Bob", bob.name);
        assertEquals(24, bob.age);
    }
}

为了使此工作正常,您可以在@SharedContainerConfig注释所引用的类中定义应用程序拓扑,如下所示:

public class AppContainerConfig implements SharedContainerConfiguration {

    @Container
    public static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>()
                    .withNetworkAliases("testpostgres")
                    .withDatabaseName("testdb");

    @Container
    public static MicroProfileApplication app = new MicroProfileApplication()
                    .withEnv("POSTGRES_HOSTNAME", "testpostgres")
                    .withEnv("POSTGRES_PORT", "5432")
                    .withAppContextRoot("/myservice");

    @Override
    public void startContainers() {
        postgres.start();
        app.start();
    }
}

上面的代码将执行以下步骤:1)使用仓库中的Dockerfile将应用程序构建到Docker容器中2)启动应用程序的docker容器和postgresql数据库(或您可能需要的任何其他数据库容器)3)等待容器准备就绪,然后运行测试以在正在运行的容器上调用HTTP请求]

我发现这种方法很好,因为它可以在安装了Docker的任何地方以相同的方式工作-无论是在本地机器上还是在CI / CD管道中。

有关MicroShed Testing的更多信息,建议您在以下位置查看网站:https://microshed.org/microshed-testing/尤其是示例,其中包括Liberty + Database示例:https://microshed.org/microshed-testing/features/99_Examples.html

免责声明:我从事Liberty和MicroShed测试的工作

© www.soinside.com 2019 - 2024. All rights reserved.