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

Kon*_*rus 30 build-process build maven jenkins gulp

我有一个项目:

  • JS客户端有一些有趣的构建过程.这包括编译CSS,连接和缩小JS和CSS,生成和处理HTML以及其他一些步骤.像Grunt或Gulp这样的Node工具非常棒.
  • 作为部署在Tomcat上的WAR的Java服务器.它包括这些资产以及所有Java代码.它具有各种测试:单元测试,可以实例化DAO并与数据库通信的集成测试,以及实际与Tomcat上运行的应用程序通信的端到端API测试.
  • 使用Protractor进行端到端测试.如果你不熟悉,它是包装Selenium的另一个Node工具.

如何以健全,强大和自动化的方式组织整个过程?

我现在拥有的是Gulp和Maven,Maven基本上拥有整个过程.

  1. 它使用antrun(doh,第三个构建工具!)在生成源中调用Gulp资产生成.
  2. 它运行常规Java构建.
  3. 它在预集成测试中使用我的WAR启动Tomcat.
  4. 它运行Java E2E测试,使用故障安全插件与该tomcat通信.
  5. 它再次召唤Gulp,这次是进行量角器测试.
  6. 它在后集成测试中关闭了Tomcat.
  7. 它应该验证测试结果.

除了那个Maven之外,那种作品通常非常严格,我觉得我太过分了.使用antrun来调用Gulp是一个丑陋的伎俩.很难控制这些步骤之间的依赖关系并监控其结果.在同一阶段很难控制事物的顺序.故障安全验证似乎不处理Gulp生成的外部JUnit报告文件.我可以继续

我想知道我是否应该在我的构建服务器(Jenkins)中做更多,可能使用构建管道或参数化触发器 - 但我从来没有做过,我不确定这是否真的更好.

那么,你将如何实现它?

am8*_*80l 31

根据我的经验,前端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>
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*zka 1

我会尝试建立一种穷人的管道。

  1. 让 grunt/gulp 首先完成其工作(处理资产、运行前端测试等 - 准备要包含在 WAR 中的工件)。当此步骤失败时,整个构建都会失败(资产生成或测试)。

  2. 使用步骤 1 中创建的资产运行常规 Maven 构建生成 WAR 文件。它将仅使用常规 WAR 文件运行自己的一组测试。不需要了解 grunt/gulp 的事情。

然后,您将有两个地方运行测试(前端,由 grunt/gulp 运行,后端由 maven 运行),但配置正确的报告器将让 CI 服务器检测到所有这些(我们使用 TeamCity,它处理得很好)。

稍微编写一下脚本,它应该比通过 antrun 多次调用 Node 更好。或者,您可以从 Maven 构建中运行第一步,但可能很难控制。