maven - 如何使用 Gulp、Maven 和 Jenkins 组织完整的构建管道,一直到集成测

我有一个项目:

  • 具有一些有趣构建过程的 JS 客户端。这包括编译 CSS、连接和缩小 JS 和 CSS、生成和处理 HTML 以及其他一些步骤。 Grunt 或 Gulp 等 Node 工具在这方面表现出色。
  • Java 服务器是部署在 Tomcat 上的 WAR。它包括这些 Assets 以及所有 Java 代码。它有各种测试:单元测试、可以实例化 DAO 并与 DB 对话的集成测试,以及实际与 Tomcat 上运行的应用对话的端到端 API 测试。
  • 使用 Protractor 进行端到端测试。如果您不熟悉,它是另一个封装 Selenium 的 Node 工具。

我怎样才能以健全、稳健和自动化的方式组织整个过程?

我目前拥有的是 Gulp 和 Maven,Maven 基本上拥有整个流程。

  1. 它使用 antrun(doh,第三个构建工具!)在 generate-sources 中调用 Gulp Assets 生成。
  2. 它运行常规的 Java 构建。
  3. 它在预集成测试中使用我的 WAR 启动 Tomcat。
  4. 它运行 Java E2E 测试,与带有故障安全插件的 tomcat 对话。
  5. 它再次使用 antrun 调用 Gulp,这次是运行 Protractor 测试。
  6. 它会在集成后测试中关闭 Tomcat。
  7. 应该在verify中验证测试结果。

这种工作,除了 Maven 通常非常严格,我觉得我太过分了。使用 antrun 调用 Gulp 是一个丑陋的把戏。很难控制这些步骤之间的依赖关系并监控它们的结果。在同一阶段很难控制事物的顺序。 Failsafe verify 似乎没有处理 Gulp 生成的外部 JUnit 报告文件。我可以继续。

我想知道我是否应该在我的构建服务器 (Jenkins) 中做更多事情,也许使用构建管道或参数化触发器 - 但我从未这样做过,我不确定这是否真的更好。

那么,你将如何实现它?

最佳答案

根据我的经验,前端 maven 插件无疑是此类构建/部署过程的最佳插件。 https://github.com/eirslett/frontend-maven-plugin .这就是我将它用于 Grunt 的方式,但它也支持 Gulp。

<plugin>
    <groupId>com.github.eirslett</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>...</version>

    <!-- optional -->
    <configuration>
        <workingDirectory>src/main/frontend</workingDirectory>
    </configuration>

   <execution>
    <id>grunt build</id>
    <goals>
        <goal>grunt</goal>
    </goals>

    <!-- optional: the default phase is "generate-resources" -->
    <phase>generate-resources</phase>

    <configuration>
        <!-- optional: if not specified, it will run Grunt's default
        task (and you can remove this whole <configuration> section.) -->
        <arguments>build</arguments>
    </configuration>
</execution>
</plugin>

需要注意的一点是,将为正在运行它的系统下载节点,因此,如果您的构建服务器上有不同的操作系统,则需要确保该版本是您已 checkin 的版本版本控制,你的本地版本(对我来说是 OSX)必须在你的项目本地维护。

关于maven - 如何使用 Gulp、Maven 和 Jenkins 组织完整的构建管道,一直到集成测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865251/

相关文章:

visual-studio - Visual Studio 2008 不必要的项目构建

c - getopt.h : Compiling Linux C-Code in Windows

c++ - 如何在 CMake 中正确创建目标之间的依赖关系?

build - 寻找真实世界的 Gradle 示例

haskell - 使用 cabal 和 ghc 构建运行时标志

java - 在 Eclipse 中使用 Ant 时出现错误运行 javac.exe 编译器消息

asp.net - Web.config 构建与发布转换不起作用

docker - Docker 构建上下文的目的是什么?

c# - 通过命令行构建 Visual Studio 项目

Xcode - 自动将文件夹中的所有文件添加到目标