问题 Git flow:如何在Jenkins中配置一键式发布流程?


我们正在使用标准的git flow分支模型(开发,掌握,发布 - ,修补程序 - 等)。

作为我们工作流程的一部分,我们希望通过jenkins设置“一键式”发布。

我在看着 jgitflow - Maven的插件。我可以设置这个插件来进行jenkins的一键式发布吗?如果是这样,配置选项有哪些?

特别是,我可以这样做吗?

Jenkins Job
Maven goals:    release-start release-finish -Dsomething -Delse

有没有办法告诉它从最新的-SNAPSHOT版本自动构建,例如如果版本是 1.2.3-SNAPSHOT 它会建立 release-1.2.3

否则,是否有一个maven插件可以构建版本 根据git flow分支模型 (即从...建立 develop 并创建一个名为的新版本分支 release-x.y.z)。


2615
2018-04-09 07:14


起源

你在此期间管理过吗?如果有,怎么样? - Puce
不,我们还没有让它运转起来。还在做mvn发布:准备和发布:执行(我们都知道,这是b ** t中的皇家痛苦)。 - vikingsteve
在这里稍作更新,我们正在使用名为的unix脚本 release.sh 执行以下操作: git flow release start ..., mvn -B release:prepare, mvn release:perform, git flow release finish ...。它并不理想,它不能在Windows机器上运行,但它是我们现在拥有的最佳解决方案。 - vikingsteve


答案:


虽然这个答案已经有一年了但我想指出同时jgitflow(v1.0-m5.1)使用maven批处理模式。

所以要发布一个神器 一个命令 你可以执行:

mvn --batch-mode jgitflow:release-start jgitflow:release-finish

 需要设定 developmentVersion 和 releaseVersion

JGitFlow将使用当前版本减去 -SNAPSHOT 部分作为发布版本。然后它递增最低有效数字并添加 -SNAPSHOT 再次为下一个开发版本。
  1.0.0-SNAPSHOT  - >发布: 1.0.0,下一个开发版本: 1.0.1-SNAPSHOT

为了配置一个 单击Jenkins发布作业 你需要配置一些关于Git的东西。

Source Code Management > Git > Additional Behaviors 选择

  • Wipe out repository & force git clone:只是为了确保工作区是干净的
  • Checkout to specific local branch: 你的 develop 科。

最后,发布在Jenkins服务器本地发生,所以你想要 推迟变革 到你的Git远程服务器。

要做到这一点,最简单的方法是添加一个 Post-build action 执行以下bash命令(分支名称可能不同,我使用了JGitFlow默认值):

git push origin develop master --tags

注意 如果Jenkins在Windows上运行,您必须执行包含相同命令的Batch脚本(有时由于Windows的SSH问题,这不起作用)或配置 Git Publisher  Post-build action 因此。


11
2017-08-19 10:12



看起来很有希望,我试试这个。谢谢。 - vikingsteve
基本上,它归结为打包为Jenkins工作的这四个命令: git clone <repo url> . && git checkout develop && mvn --batch-mode jgitflow:release-start jgitflow:release-finish && git push origin develop master --tags - gucce
@gucce你的步骤很棒。鉴于jgitflow在一段时间内没有看到活跃的开发,你有没有成功使用任何其他git flow maven插件? - testphreak
@testphreak不,我不知道任何其他maven插件。虽然它没有得到积极的开发(也许永远不会再次开发,见[1]),但我们没有遇到任何阻止我们将其用于当前项目的问题。对于下一个项目,我不知道我们是否会再次使用它。 [1] groups.google.com/forum/#!topic/maven-jgitflow-users/... - gucce
只是想指出你不需要添加push命令,有一个参数:-DpushReleases = true。我们使用它,这使得jenkins工作变得简单。 bitbucket.org/atlassian/jgit-flow/wiki/goals/... - Noremac


你可以简单地使用jenkins插件 M2发布插件 随着发布目标的选择 -B -DautoVersionSubmodules=true jgitflow:release-start jgitflow:release-finish


1
2017-07-01 17:31



好。你确定jgitflow可以在批处理模式下工作吗?最后我尝试了,它需要一个 version 某种参数。 - vikingsteve
@vikingsteve使用 developmentVersion 和 releaseVersion属性,看到我的答案。 - CSchulz


我们最终在客户端通过CLI启动发布(因为在Jenkins中有一个 窃听器 开始发布)。

git flow release start -DautoVersionSubmodules=true

如果要使用批处理模式,则需要指定 developmentVersion 和 releaseVersion

在Jenkins中创建了一个新工作来构建发布分支并使用 M2发布插件 最后发布它:

-B jgitflow:release-finish

如果您使用某些自定义配置文件,则必须通过其他方式传递它们 参数 由...引起的 窃听器

-Darguments=-Pprofile

1
2018-06-24 06:52





我们从未找到过通过Jenkins中的插件或maven目标来实现此功能的方法。

我们的解决方案结束了 bash 做的脚本 git flow release start <version>,maven发布过程, git flow release finish <version>和其他东西(git pull on develop 和 master 一开始,git push 最后的松弛通知)。


0
2018-06-02 07:25