【问题标题】:Running Jenkins integration test without having to rebuild with Maven无需使用 Maven 重建即可运行 Jenkins 集成测试
【发布时间】:2015-06-04 05:56:45
【问题描述】:

我在理解 Jenkins 如何与 Maven 交互以创建简单的构建管道时遇到了一些问题。例如,假设我想做以下管道:

1 Compile code, run unittest, and package to code.
2 Deploy application to test server.
3 Run integration tests.

这将转化为:

1 mvh clean install
2 deploy.sh
3 mvn verify

对于我的单元测试,我使用surefire,对于集成测试,我使用failsafe。然而问题是mvn verify 将重新完成整个构建过程。我想做的只是运行集成测试,而不是所有导致验证的步骤。解决这个问题的标准方法是什么?

【问题讨论】:

    标签: java maven jenkins


    【解决方案1】:

    执行此操作的 maven 方法是使用 maven 完成所有操作。默认的 maven 构建生命周期对于您想要执行的每个步骤都有一个阶段:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

    例如,默认生命周期包括以下阶段 (有关生命周期阶段的完整列表,请参阅生命周期 参考):

    validate - 验证项目是否正确且所有必要 信息可用

    compile - 编译源代码 项目

    test - 使用合适的单元测试编译后的源代码 测试框架。这些测试不应该要求打包代码 或部署

    package - 获取编译后的代码并将其打包到它的 可分发的格式,例如 JAR。

    集成测试 - 过程和 如有必要,将包部署到集成环境中 可以运行测试

    verify - 运行任何检查来验证包是 有效且符合质量标准

    install - 将软件包安装到 本地存储库,用作其他项目的依赖项 本地

    部署 - 在集成或发布环境中完成,复制 最终包到远程存储库以与其他人共享 开发人员和项目。

    因此,您希望将工件部署到您的测试服务器(您的第 2 步),作为集成测试阶段的一部分。然后你所要做的就是运行

    mvn clean install
    

    这将清理然后执行所有构建、运行单元测试、打包所有内容、部署到集成环境、运行集成测试并在本地存储库中安装工件。

    【讨论】:

    • 但是如果我想依赖其他 Jenkins 构建怎么办。例如,我不想在其他构建完成之前运行集成测试?那我还会遇到我上面描述的问题吗?
    • Maven 总是运行阶段直到并包括您要求的阶段。如果你想让 jenkins 编排多个 maven 项目,你需要做的就是在 jenkins 中指定依赖项。我认为您可能正在寻找的具体答案是您希望将集成测试放入不同的 Maven 模块中,因此当您“mvn verify”时,它只会构建您的测试类并使用故障安全运行您的集成测试插入。显然,集成测试模块将依赖于包含实际功能的 maven 模块。
    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 2015-03-17
    • 1970-01-01
    • 2016-03-09
    • 2017-01-04
    • 2023-03-25
    • 2013-06-24
    • 2013-04-07
    相关资源
    最近更新 更多