【问题标题】:Release with Maven, SVN and Hudson(jenkins)使用 Maven、SVN 和 Hudson(jenkins) 发布
【发布时间】:2011-10-22 22:41:48
【问题描述】:

我想做一个与 Maven 发布插件假设的含义略有不同的“发布”。

我有一个 web 项目(我想“发布”),它依赖于同样由同一个 hudson 构建的各种其他项目(虽然不是作为模块)。

“发布”应该执行以下操作:

  • 通过 hudson 构建所有dependend^dependend 项目
  • 构建网络项目(向 MANIFEST 添加递增的版本号)
  • 将 web-project 部署到 tomcat(这已经在常规构建中)
  • 在 svn 位置 x 创建一个包含版本号的新标签
  • 将之前构建的项目的所有当前 svn/head 源复制到新标签中
  • 将所有涉及项目的所有 pom 版本更改为 SVN /head 上的 ${versionNumber}.0.1-SNAPSHOT

我认为这是每个人都必须做的事情,通过谷歌很难找到实际的解决方案。

【问题讨论】:

  • 您的最后一个假设是一个有趣的假设。你为什么这么认为?

标签: svn maven hudson release jenkins


【解决方案1】:

如果您有特定需求,那么我认为实现它们的最简单方法是编写脚本。 Hudson 中可以使用多种脚本语言作为构建步骤。

【讨论】:

    【解决方案2】:

    听起来很像我们的要求。我们还没有在 Jenkins 中完全构建它。

    所以我们有以下程序:

    1. 宣布代码冻结,使所有团队都能在主干中拥有“正确”的代码,并使代码彼此“同步”。

    2. 我们运行一个(本地开发的)java 工具来检查代码,为发布和发布标签创建分支。从下一次迭代开始,它还将使用新的快照版本更新主干。该工具有自己的配置文件,因此它知道版本号是/将是什么以及需要更新哪些项目(以及它们所在的位置)。

    3. 我们运行我们的“构建发布”作业,它与我们所有的内部企业存储库几乎没有联系(它只知道第三方和外部存储库)。该作业清除了本地 maven 存储库(它有自己的存储库,没有其他作业使用)。我使用 subversion-tag-parameter 下载我们所有项目的特定子文件夹(我们需要在作业中配置它)和一个额外的 Mega-project pom,它将所有下载的项目声明为模块(需要转到根文件夹) .这项工作还完成了所有需要的打包工作(压缩静态内容、将来自不同项目的静态文件合并到一个档案中……)。

    4. 部署

    5. 功能测试

    到目前为止,2 有自己的工作,3 是完全自动化的,我们只需要手动启动它。第 4 步正在为 CI 工作,第 5 步为 CI 计划。第 4 步是发布过程自动化(即使只是部分自动化)的热门候选。

    我希望这对您有所帮助并给您一些想法。

    【讨论】: