Build once使用Jenkins和Github部署许多(特定分支工作流)

Build once使用Jenkins和Github部署许多(特定分支工作流),jenkins,build,jenkins-plugins,jenkins-pipeline,Jenkins,Build,Jenkins Plugins,Jenkins Pipeline,我正在创建Jenkins管道,用于构建和部署我们的应用程序。 我希望在部署多个方法后,为登台和生产环境构建相同的构建 将功能分支合并到暂存分支将为暂存和生产构建一个应用程序,但它将仅将其部署到暂存存储桶 在测试之后,开发人员最好将登台分支合并到主分支中,主分支将接受上一个登台构建并将其部署到生产环境中 另一种选择是拥有一个分支,开发人员将在Jenkins上手动触发另一个作业,将构建部署到生产环境中。 我想避免开发人员进入jenkins并触发构建,因为他们中的大多数人觉得这很可怕,他们还需要通过一

我正在创建Jenkins管道,用于构建和部署我们的应用程序。 我希望在部署多个方法后,为登台和生产环境构建相同的构建

将功能分支合并到暂存分支将为暂存和生产构建一个应用程序,但它将仅将其部署到暂存存储桶

在测试之后,开发人员最好将登台分支合并到主分支中,主分支将接受上一个登台构建并将其部署到生产环境中

另一种选择是拥有一个分支,开发人员将在Jenkins上手动触发另一个作业,将构建部署到生产环境中。 我想避免开发人员进入jenkins并触发构建,因为他们中的大多数人觉得这很可怕,他们还需要通过一些讨厌的vpn配置步骤来访问jenkins等

这是一种不好的做法吗?你对如何实现这样的目标有什么建议吗


谢谢

这是一个devops的问题,而不是Jenkins的问题,但这是我的看法

我无法决定您是说要从主分支重新构建,还是只使用提交到主分支来触发原始暂存工件的部署。因此,我将解决这两个问题

对于这种情况:

如果您在一个暂存分支中构建一个工件,并对其进行测试。在测试中,一切都是绿色的。因此,您可以将这些更改合并到另一个分支,重新构建并部署到生产环境中

问题是:您能否100%确定主分支中没有任何其他内容与在暂存中构建和测试的内容相同

您正冒着jello view反模式的风险,因为未知和未经测试的更改可能会潜入您的生产工件中。现在很难解决为什么它在It阶段工作得很好,但在生产中却失败了

对于第二种情况:

如果你说你不会从主分支重建,那么合并回主分支不会给你买任何东西,除了启动新构建的触发器,因为你永远不会从主分支生成工件

如果您打算这样做,我认为您可以提交一个分支,然后标记一个要投入生产的发布,然后触发标记

无论哪种方式,这似乎是一种奇怪的模式,在詹金斯很难以自动化的方式实现。不知何故,新触发的构建必须找到先前构建的工件并将其部署到生产环境中

可能的解决办法:

有几种方法可以解决这个问题,但最简单的方法之一是构建一次,并在整个过程中部署相同的工件,正如您提到的另一种选择。但这可能需要詹金斯的一些批准或额外触发

如果您不希望开发人员接触Jenkins,那么更可能的解决方案是在登台环境中构建并运行单元测试和冒烟测试。然后,当开发人员希望将构建升级到生产时,他们会将其提交到主分支,在主分支中启动相同的构建,并且除了更高级的集成、功能和验收测试之外,还会再次执行所有测试。如果不通过,就不能投入生产

您在staging中的初始测试为开发人员提供了快速反馈,但不作为官方测试,官方测试只在生产构建中运行

使用管道脚本,您可以通过单个Jenkins文件和单个多分支管道作业轻松实现这一点,其中的阶段仅在分支模式匹配时运行

stage ("Acceptance Testing" ) {
    when { branch "master" }
    echo "Do testing here"
}

您应该查看多分支管道。然后根据分支名称,您可以做出决定。stage'build and package'{当{表达式{BRANCH_NAME==~/master{staging{124; develope/}}步骤{//do something}