Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Jenkins作业与相关git存储库和多个分支一起使用_Java_Git_Maven_Jenkins_Continuous Integration - Fatal编程技术网

Java 如何将Jenkins作业与相关git存储库和多个分支一起使用

Java 如何将Jenkins作业与相关git存储库和多个分支一起使用,java,git,maven,jenkins,continuous-integration,Java,Git,Maven,Jenkins,Continuous Integration,我们有两个git存储库,平台和我们(我们还有其他特定于地理位置的存储库,这就是它们被拆分的原因,但它们在这里不一定相关)。我们依靠平台 我们使用的是git flow(这意味着新功能在它们自己的分支中,如feature/some product,develope分支更稳定,代表QA就绪的构建,master分支稳定,适用于发行版)。(如果功能部件同时包含平台部件和美国部件,则每个部件中将有一个具有相同名称的分支。)我们决定这些特性的Jenkins作业不应该运行mvn deploy,因为我们不想将它们

我们有两个git存储库,平台和我们(我们还有其他特定于地理位置的存储库,这就是它们被拆分的原因,但它们在这里不一定相关)。我们依靠平台

我们使用的是git flow(这意味着新功能在它们自己的分支中,如
feature/some product
develope
分支更稳定,代表QA就绪的构建,
master
分支稳定,适用于发行版)。(如果功能部件同时包含平台部件和美国部件,则每个部件中将有一个具有相同名称的分支。)我们决定这些特性的Jenkins作业不应该运行
mvn deploy
,因为我们不想将它们发布到快照存储库,并且可能不应该运行
mvn install
,因为我们不想让另一个特性分支从Jenkins的本地repo获取它(尽管我们对此不太确定)。我们认为,他们应该只确保所有内容都已编译,并且单元测试通过(
mvn-verify

这就是问题所在,因为这些是独立的git存储库,我们没有对编译后的jar进行任何操作(
install
deploy

  • 我们如何安全地将平台作业中编译的jar公开给美国,而不将它们公开给其他开发人员或作业(或者这仅仅是在执行
    mvn安装
    )或
  • Jenkins job如何与我们一起为特定分支机构构建平台
如果我们只有一个积极开发的分支(或者我们使用的是subversion),这就不是问题

我们的一些想法(以及对每个想法的关注)

  • 对于功能分支,请使用不同的版本(例如,
    8.1.0-SNAPSHOT-some-product
    )。
    • 对于每个功能分支来说,这似乎都需要做大量的工作
    • 这似乎会用“陈旧”的罐子堵塞本地回购协议,我们需要担心清除它们
  • 以某种方式使用
    git子模块
    检查平台和美国的
    功能/某些产品
    ,或者使用
    mvn verify--reactor
    或简单的pom文件,将顶级项目作为模块。
    • 如何让Jenkins添加子模块
    • 如果子模块已经存在,那么就需要一个完整的git回购,这似乎是多余的
    • ——反应堆不总是工作
    • 如何提供pom文件
  • 只需执行
    mvn安装
    • feature/other thing
      可能只在我们身上,所以在平台
      feature/other thing
      发布到Jenkins本地存储库之后(这可能与平台
      develop
      非常不同,平台
      feature/other thing
      通常是根据平台构建的),它会(我们认为)使我们
      功能/其他东西
      在错误的意义上失败(或通过!)(假设如果它是根据平台
      开发
      编译的,可能会得到不同的结果)

    • 我不必亲自解决这个问题。。。。以下是我对这个问题的看法:

      如果两个分支必须只有一个作业(一个坏主意),那么可以使用参数化构建插件传入文本字符串“US”或“Platform”,并在shell脚本中包含逻辑,该脚本将检查相关repo的分支

      但是,这消除了让repo轮询启动构建的能力。您必须在cron上设置一个构建计划,并且无论发生什么,您都将获得一个新的构建,即使repo没有更改(除非您的批处理/shell脚本足够聪明,能够检查更改)

      我看不出有任何理由不让詹金斯做两份独立的工作,每个部门一份


      如果一个作业需要访问.jars(也称为构建工件),那么您可以始终从jenkins服务器上作业的“最新”URL引用任何其他jar的工件。确保作业指定了需要归档的工件。

      我最终解决这个问题的方法是使用maven版本插件。我必须确保所有模块都是顶级项目中的管理依赖项,但这可能是另一个问题。此外,我确信,美国项目将需要明确声明其版本,即使它与父项目相同

      它们都轮询git,但如果它成功构建,平台作业也会触发我们

      版本插件的工作方式要求您分两步完成。在作业中添加2个“调用顶级Maven目标”,第二个是
      clean deploy
      。第一点对于平台和我们来说有点不同

      平台:
      mvn版本:set-DnewVersion=yourBranchName-${project.version}

      美国:
      mvn版本:更新父级-DparentVersion=yourBranchName-${project.version}版本:set-DnewVersion=yourBranchName-${project.version}

      如果分支只存在于美国存储库中,那么显然不要将平台设为一,而美国的命令与平台的命令相同


      我遇到的最后一个问题是,最初我的新版本是
      ${project.version}-yourBranchName
      ,但这里的问题是,作业部署到的存储库只接受快照,因为版本没有以
      -SNAPSHOT
      结尾,所以它给出了错误代码400。

      ,因为它们可以。我真的不明白为什么人们不说出理由就投了反对票。你需要惩罚来改造。你怎么能在不知道自己错在哪里的情况下改造自己?