我正在处理2个项目,这些项目存储在2个git repos Project1和Project2中

Project1是一个JavaScript项目。它有自己的存储库(例如https://github.com/gandra/project1.git)
Project2是一个Java Maven项目。它有自己的存储库(例如https://github.com/gandra/project2.git)

这是我要改进的当前工作流程:

  • 在Project1中提交更改并将其推送到原始
  • 在Project1中运行grunt。这将生成Project1/build目录
  • 手动将Project1/build内容复制到Project2/libs/project1-lib目录
  • 在Project2中提交更改(Project2/libs/project1-lib)
  • Runk jenkins构建和部署

  • 我想以某种方式避免执行步骤3(将Project1/build内容的手动副本复制到Project2/libs/project1-lib目录中)
    我曾考虑过将Project1作为子树集成到Project2中,但是这种方法的问题在于,因为它会将所有Project1目录结构都放入Project2/libs/project1-lib中,而我只想获取Project1的子目录(Project1/build/*)

    一些重要的注意事项:
    Project1更改仅在其自己的repo(https://github.com/gandra/project1.git)中发生,并且此更改应传播到Project2。因此没有从Project2/libs/project1-lib更新Project1
    换句话说:
    -Project1中的提交会影响Project2
    -Project2中的提交不影响Project1

    最佳答案

    好吧,让我们在这里回顾最重要的事实:

  • Project2是maven项目(可能带有war包装,因为您将部署它)。
  • Project2依赖于Project1,它希望他的输出构建在路径Project2/libs/project1-lib上

  • 在我看来,build(甚至是部分buil)并不意味着要在任何源代码管理下进行,因此我不会将诸如Project2/libs/project1-lib之类的Project2的任何路径保留在git下。
    Maven war插件具有此好功能maven-war-plugin-overlays
    因此,如果Project2将Project1视为具有包装类型的 war 类型的行家依赖,例如
      <dependencies>
        ...
        <dependency>
          <groupId>your.group.id</groupId>
          <artifactId>project1</artifactId>
          <version>1.0-SNAPSHOT</version>
          <type>war</type>
          <scope>runtime</scope>
        </dependency>
        ...
      </dependencies>
    

    ,则无需对Project2/libs/project1-lib位置进行任何处理,因为这将在打包阶段为您提供帮助。
    但是要这样做,您必须将Project1的 war 工件安装到您的联系中。
    这里有几种解决方案:

    解决方案1)
  • 使Project1成为完全的Maven项目,并确保在他的 war 中build。的输出在路径./libs/project1-lib中完成。
    由于Project1现在将使用maven进行构建,因此您必须在打包阶段之前的某个阶段集成要由maven调用的Project1的先前构建工具(grunt,gulp或任何一种)。
  • 在Project2中添加新的依赖项,如下所示:
    <dependency>
      <groupId>your.group.id</groupId>
      <artifactId>project1</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>war</type>
      <scope>runtime</scope>
    </dependency>
    


  • 解决方案2)。
  • 使用当前的Project1构建器,请确保使用以下结构./libs/project1-lib将项目打包到war中。
    使用相同的生成器将其作为 war 工件安装在您的联系上(注意:您必须在联系上安装pom.xml,以便其他项目可以引用Project1)
    幸运的是,如果您将grunt用作js构建器,则可以使用此npm组件grunt-nexus-deployer来实现我在此描述的功能。
  • 与解决方案1)相同...

  • 解释:

    当您推送对Project1的更改时,您的CI将触发作业,该作业将在您的关系上安装project1-1.0-SNAPSHOT.war
    完成此操作后,将触发Project2的CI作业,它将具有project2构建所需的一切。

    笔记:
    在这两种解决方案中,都删除Project2/libs/project1-lib层次结构,因为它不再使用了。

    编辑:

    对于解决方案2),也许您应该使用grunt-maven-tasks而不是grunt-nexus-deployer,因为它具有更多选项并且更合适。

    关于git - 如何将构建输出从一个git repo集成到另一个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29965058/

    10-13 07:19