【问题标题】:How do I set up a TeamCity build job to execute a maven job with no pom如何设置 TeamCity 构建作业以执行没有 pom 的 maven 作业
【发布时间】:2015-06-10 08:46:47
【问题描述】:

我们有一个内部开发的 MOJO,它可以生成内容,并且不需要您拥有现有的项目或 POM。想想 maven 原型插件,您可以在其中运行 mvn [mojo]:[goal] 并让 maven 在没有 POM 的情况下执行该目标。

此 MOJO 连接到特定环境中的特定数据库实例,并为数据库的内容生成一些元数据,因此我们的测试人员可以检查元数据并找到具有给定测试所需的某些属性的类似生产的数据.

当您执行元数据 mojo 时,maven 从可用的 repo(在我们的例子中是 Artifactory repo)中解析 MOJO,然后它会执行它的工作并返回。它不会创建任何工件或其他输出。

我们使用 TeamCity 作为 CI 服务器,但它也有元数据生成作业,因此只需单击一下,开发人员就可以针对特定数据库启动元数据生成作业。

问题在于 TeamCity 中的 Maven 运行程序需要 POM。如果 TC 还没有从 VCS 签出项目,或者它签出的项目没有 POM,maven runner 不会做任何事情。在这种情况下,没有什么要检查的(MOJO 是从 Artifactory 解析的),所以没有 POM。

我可以将 TC 作业设置为使用命令行运行程序并让它执行,例如,mvn com.example:metadata-generate -DenvironmentName=UAT1,但是无法指定 maven 应该使用的 maven 设置文件。

所以我的问题是,我该怎么做?是否可以让 maven runner 执行任意 maven 命令而不需要 POM?或者,使用命令行运行器,是否可以让 TC 作业将特定的 maven 设置文件复制到构建代理,以便可以在 maven 命令中将其引用为mvn com.example:metadata-generate -DenvironmentName=UAT1 -s {path-to-settings-file}

【问题讨论】:

    标签: maven teamcity


    【解决方案1】:

    事实证明,TC 可以很好地处理无 pom 的 maven 构建。我的问题是 MOJO 没有声明为 not 需要一个项目。

    比较我的 MOJO 和 MavenArchetypePlugin source,我需要用类级别的 javadoc 标记 @requiresProject false 声明我的 MOJO。

    一旦我做到了这一点,TC 就可以完美地运行我的无 pom 工作。我所要做的就是清除 TC 构建配置中的 Path to POM file: 字段并将其留空。

    【讨论】:

      【解决方案2】:

      您可以自定义作为参数的 pom 文件的名称到 teamcity 中的 maven 构建步骤中,并将其用作 第二个“构建步骤”。让我们将参数称为pom.file.name

      在第一步中,解决您拥有的所有内部依赖项,并将您要执行的 pom 文件的名称设置为变量 pom.file.name

      如果你想了解更多关于如何在 teamcity 中更改变量的值,你可以阅读它here

      【讨论】:

      • 我不认为这是一个解决方案。 TC 作业不会从 VCS 中检查任何内容,因此没有要执行的 pom。除非您是在谈论在第一个构建步骤中以某种方式生成“假”pom 并在第二个构建步骤中执行它?
      猜你喜欢
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多