问题标签 [release-management]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
188 浏览

release-management - 有哪些策略可用于管理跨多个子产品和多个版本的更新?

我们的产品附带多个扩展,每个扩展都有自己的版本号。(具体来说,我们有一个带有多个扩展的 xulrunner 应用程序)。xulrunner 的扩展管理器提供了更新功能,以便在该扩展的版本号增加时它会调用一个函数。这给了我们一个钩子来对更新进行任何必要的清理。

但是,很难想出一个好的方法来跟踪哪些扩展需要增加版本号,哪些基本保持不变。我们可以想象的最佳过程是 1) 在关闭工单时添加前期工作(每张工单都可以有一系列标志来指定需要修改哪些扩展)
2) 编写查询以搜索自上次以来哪些工单对扩展进行了更改为特定客户发布和 3) 更新整个产品的扩展版本号

在开发和发布时,这一切似乎都很乏味——而且容易出错。有什么建议么?

0 投票
1 回答
86 浏览

bazaar - 确定在 Bazaar 中创建标签的日期

使用集市:

是否可以确定修订被标记的日期?这对于确定代码何时发布很有用。请注意,我对标记修订的日期不太感兴趣,而是标记修订的时间。

0 投票
3 回答
18448 浏览

eclipse - 如何在 Eclipse ant 编辑器中启用撤消?

在 Eclipse 的 ant 编辑器中,撤消对我不起作用。当我按下 Ctrl-Z 时,什么也没有发生。

是否可以以某种方式启用撤消或者这是一个错误?

我在 Windows XP Professional 上使用 Eclipse 3.4.2 (Ganymede)。

0 投票
3 回答
2959 浏览

versioning - 在构建托管/SAAS 应用程序时,如果允许客户自定义,您如何管理多个版本?

假设您正在构建一个计算器应用程序。您将允许客户使用自己的徽标和 CSS 样式表自定义此计算器。客户将他们的域指向您托管的计算器,该应用程序将为每个客户提供正确的主题。例如:

  • www.AcmeCalculator.com将提供带有 Acme 标志的计算器,以及他们创造的平淡的企业风格。
  • www.HellzCalc.com将为计算器提供一些地狱天使骑自行车的标志和他们创建的黑色、血红色主题。

你推出了 Calculator 1.0,每个人都编写了他们的样式来使用这个版本。

下个月你准备发布 Calculator 1.1,它添加了一个新特性,比如说“科学模式”,它需要你添加一些新的 UI——在这个例子中是 HTML——组件。这意味着如果你推出 1.1,你将打破你客户的一些风格。

我想出的最佳解决方案是让应用程序的多个版本保持运行。例如:

  • www.AcmeCalculator.com解析到您的应用服务器,该服务器检查 Acme 当前的版本,并转发到www.AcmeCalculator.com/1.0
  • www.HellzCalc.com解析到您的应用服务器,它注意到他们正在新的 1.1 版本上运行,因为他们进入了更新的 CSS 以在新版本上工作并单击“完成升级”按钮或其他任何东西,所以他们得到重定向到“ www.HellzCalc.com/1.1

该系统的一个问题是,您将不可避免地遇到从不投资升级的懒惰客户。您将同时运行 200 个版本,试图修复每个版本中的错误,基本上会发疯。

一种解决方案是使用您每月托管费用的一部分来雇用“UI 迁移团队”,该团队将是一组设计师,他们唯一的工作就是不断让客户排队运行最旧的版本并调整他们的 CSS 并验证他们在最新版本上运行。这将允许您同时仅支持 X 个版本,其中 X 是您在 UI 迁移团队中投入多少资金的函数,添加资源以加快或减慢它们。

同样的想法也适用于数据库更改:Calculator 1.0 和 1.1 在数据库 1.0 上运行,但 Calculator 1.2 在数据库 1.1 上运行,等等。您可以添加带有版本名称的模式,并使用类似的“数据迁移团队”来移动数据架构 1.0 到架构 1.1,最终在没有(应用)客户端时删除架构 1.0。

我敢肯定这种类型的问题以前出现过,我想看看其他人是如何解决的。也许甚至有一个“最佳实践”。

0 投票
4 回答
1010 浏览

php - 在从 SVN 部署期间维护开发环境和实际环境之间的配置差异

我们使用 ExpressionEngine CMS (php) 创建网站。对于每个站点,我们设置一个 subversion 存储库并提交 EE 安装以及使用的任何自定义模板、图像、javascript 等。存储库中包含包含所有环境变量的文件和 .htaccess 文件。

我们有一个开发服务器,其中包含通过我们用于开发的提交后更新的存储库的工作副本。当我们准备好发布时,我们在 subversion 中创建一个分支,进行生产环境所需的任何更改,标记发布号,导出存储库,将其上传到实时服务器上的新目录,并将文件符号链接到位。回滚就像符号链接回以前的版本一样简单。

问题是我们必须修改开发服务器和生产服务器需要不同的环境变量的那一步。这就像(取消)注释会重定向到错误位置的 htaccess 规则,因为域不同而换出 google map API 密钥,运行脚本将 javascript 最小化为一个混淆文件以保持大小和 http 连接减少等.

问题是如何才能更加自动化?我们希望将发布程序降到最低限度。我熟悉 Capistrano 和 Make 等工具的存在,但我不确定如何让它们修改所有必要的文件......你将如何组织这样的事情?当它每两周发生一次时,这值得花时间自动化吗?

0 投票
3 回答
642 浏览

ruby-on-rails - 将 Rails 应用程序部署到多个位置

我正在尝试将相同的 rails 应用程序部署到具有不同应用程序名称、不同徽标、不同样式表等的两个不同位置。

我的代码基于我存储在环境/production.rb 中的 APP_NAME 和 HOST_NAME 变量工作。现在我需要实际部署它,我需要一个比在生产机器上手动编辑环境文件更好的解决方案。

我能看到的唯一方法是创建一个新的生产环境 - 例如 production_app2 - 并在其中以不同的方式定义 APP_NAME 和 HOST_NAME。有没有更好的办法?

0 投票
2 回答
1048 浏览

.net - Msbuild新手需要入门

我们在工作中维护一个用 vb/c# .net 开发的中型 windows 应用程序。现在这个应用程序的构建和部署过程仍然是手动的。我决心使用我现在还不知道的 MSBuild 使这个过程自动化。

我们的应用程序有一个简单的构建结构,一组项目已经分为四个解决方案(.sln),只需要按顺序构建四个 sln。然后将一个项目(这是要构建的最后一个 sln 的一部分)发布到一个目录。这就对了。一个简单的过程已经花费了 30 分钟的手动构建时间,我很确定这可以在至少 1/4 的时间内使用 msbuild 完成而无需手动干预。

我所有的目标都设置得很好,我开始在网上寻找 MSBuild 资源来完成我的流程,但可能会环顾许多事情让我感到困惑。对于我的简单场景,需要一个关于如何开始以及从哪里开始的指针或一个很好的解释。非常感谢您的帮助。

0 投票
3 回答
1774 浏览

version-control - 从一个代码库开发多种产品的策略

我正在开发一个项目,该项目将(很快)分支为多个不同版本(试用版、专业版、企业版等)。

自从 Subversion 首次发布(以及之前的 CVS)以来,我一直在使用它,所以我对分支和标签的抽象概念感到满意。但在我所有的开发经验中,我只真正研究过主干代码。在极少数情况下,其他一些开发人员(拥有存储库)要求我将更改提交到某个分支,而我只是按照他的要求去做。我认为“合并”是一种奇异的魔法,而且我只是在仔细监督下尝试过。

但在这种情况下,我负责存储库,这种事情对我来说是全新的。

绝大多数代码将在所有产品之间共享,因此我假设代码将始终驻留在主干中。我还假设每个版本都有一个分支,每个产品的发布版本都有标签。

但除此之外,我知道的不多,而且我敢肯定有一千零一种不同的方法来搞砸它。如果可能的话,我想避免把它搞砸。

例如,假设我想为专业版和企业版开发一个新功能,但我想从演示版中排除该功能。我将如何做到这一点?

在我的日常开发中,我还假设我需要在工作时将我的开发快照从一个分支切换到另一个分支(或返回到主干)。以最小化混乱的方式做到这一点的最佳方法是什么?

你们还有什么其他的策略、指导方针和技巧建议?


更新:

好吧,那好吧。

看起来分支根本不是正确的策略。因此,我更改了问题的标题以删除“分支”焦点,并且我正在扩大问题范围。

我想我的其他一些选择是:

1) 我始终可以分发具有所有功能的软件的完整版本,并使用许可证根据许可证中的授权选择性地启用和禁用功能。如果我采用这条路线,我可以想象 if/else 块的老鼠巢调用某种单例“许可证管理器”对象。在这种情况下避免代码意大利面的最佳方法是什么?

2)我可以使用依赖注入。但总的来说,我讨厌它(因为它将逻辑从源代码移动到配置文件中,这使得项目更难理解)。即便如此,我仍在分发完整的应用程序并在运行时选择功能。如果可能,我宁愿不将企业版二进制文件分发给演示用户。

3) 如果我的平台支持条件编译,我可以使用#IFDEF 块和构建标志来选择性地包含功能。这对于像整个 GUI 面板这样的大而粗的功能来说效果很好。但是对于较小的跨领域音乐会呢……例如日志记录或统计跟踪?

4)我正在使用ANT来构建。是否有类似 ANT 的构建时依赖注入之类的东西?

0 投票
4 回答
3801 浏览

makefile - 具有许多目标目录的 GNU make

我必须将许多 HTML 文件的生成集成到现有的Makefile. 问题是 HTML 文件需要驻留在许多不同的目录中。我的想法是编写一个隐式规则,将源文件(*.st)转换为相应的html文件

和一个依赖于所有 html 文件的规则

如果 HTML 文件不在 builddir 中,则make找不到隐式规则:*** No rule to make target. 如果我像这样更改隐式规则

找到了,但是我必须对项目中的几乎每个文件都有一个隐式规则。根据GNU 手册中的隐式规则搜索算法make,规则搜索的工作方式如下:

  1. 将整个目标名称t拆分为目录部分,称为d,其余部分称为n。例如,如果tsrc/foo.o,则dsrc/,并且nfoo.o
  2. 列出所有目标匹配tn的模式规则。如果目标模式包含斜线,则与t匹配;否则,反对n

为什么没有找到隐含规则,假设make使用 GNU,什么是最优雅的解决方案?

这是我的精简版Makefile

0 投票
13 回答
4315 浏览

javascript - 在部署之前你对你的 JavaScript 代码做了什么?

您在部署过程中是否有缩小 JS 的步骤?您是否有任何类型的 JavaScript 预处理器,允许您在评论和 console.logs 中留下,然后自动删除它们?你的 JavaScript 机器是由 GWT 还是 Script# 生成的?您是否使用 ANT 或其他工具来自动化部署?

我看到很多 JavaScript 看起来像是直接从编辑器中出来的,包含大量空白和注释。其中有多少是由于不关心已部署代码的状态,又有多少是由于开放网络的精神?