问题标签 [build-process]
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.
version-control - 管理构建版本的最佳构建过程解决方案
我运行一个包含多个独立应用程序的相当复杂的项目。然而,这些使用了几个共享组件。所以我有一个类似于下面的源代码树。
- 我的项目
- 应用 A
- 共享1
- 共享2
- 应用 B
- 应用 C
所有应用程序都有自己的 MSBuild 脚本,用于构建项目及其所需的所有共享资源。我还在 CruiseControl 控制的持续集成构建服务器上运行这些构建。
部署应用程序时,它们会部署在多台服务器上以分配负载。这意味着跟踪每个不同服务器上部署的构建/修订版本非常重要(我们需要在 DLL 版本中包含当前版本,例如“1.0.0.68”)。
同样重要的是能够重新创建一个已构建的修订/构建,以便在某些事情没有按预期工作时能够回滚(哦,是的,那发生了......)。今天我们使用 SourceSafe 进行源代码控制,但如果我们能提出充分的理由,这可能会改变(SS,到目前为止它实际上对我们来说工作正常)。
我们尝试遵循的另一个原则是,只有由我们进一步部署的集成服务器构建和测试的代码。
“CrusieControl 构建标签”解决方案
我们对解决上述问题有几个想法。第一个是让持续集成服务器构建并在本地部署项目并对其进行测试(现在可以这样做)。您可能知道 CruiseControl 中的成功构建会生成一个构建标签,我想我们可以用它来设置可执行文件的 DLL 版本(所以构建标签 35 会创建一个类似“1.0.0.35”的 DLL)?这个想法也是使用这个构建标签来标记完整的源代码树。然后我们可能可以通过该标签检查并稍后重新创建构建。
标记完整树的原因是不仅包括实际的应用程序代码(位于源代码树中的一个位置),还包括所有共享项(位于树中的不同位置)。因此,“Application A”的成功构建将使用标签“ApplicationA35”标记整个树。
但是,在部署之前尝试重新创建此构建并设置 DLL 版本时可能会出现问题,因为我们将无法再访问 CruiseControl 生成的构建标签。如果所有项目的所有 CrusieControl 构建标签都是唯一的,我们可以只使用编号进行标签,但情况并非如此(应用程序 A 和 B 可以同时在构建 35 上)所以我们必须在标签。因此 SourceSafe 标签为“Application35”。一旦我们构建了构建 35,我如何重新创建构建 34 并将 1.0.0.34 设置为 DLL 版本号?
“修订号”解决方案
有人告诉我,例如 Subversion 会在每次签入时为整个源代码树创建一个修订号——是这样吗?SourceSafe 有类似的东西吗?如果这是正确的,那么想法是在获取最新版本时获取该修订号并在 CruiseControl 服务器上构建。然后可以使用修订号来设置 DLL 版本号(例如“1.0.0.5678”)。我想如果需要,我们可以为 Subversion 获得这个特定的修订,然后将包括该应用程序和所有共享项目,以便能够从过去重新创建特定版本。这会起作用吗?这是否也可以使用 SourceSafe 来实现?
总结
所以两个主要要求是:
- 能够跟踪构建和部署的 DLL 的构建/修订号。
- 能够重建过去的修订/构建,在该构建的可执行文件上设置旧的构建/修订号(以符合要求 1)。
那么你将如何解决这个问题?您首选的方法是什么,您将如何解决它(或者您有完全不同的想法?)?**请给出详细答案。**
奖励问题修订号和内部版本号之间有什么区别,什么时候真正需要两者?
apache-flex - 在 ant/nant 中构建 Flex 项目
在我的公司,我们的 Flex 项目中经常出现构建中断的问题。问题的出现主要是因为开发人员在他们的本地机器上进行的构建与在构建机器上发生的构建根本不同。开发人员正在使用构建项目FlexBuilder/eclipse
,构建机器正在使用命令行编译器。不可避免地,{projectname}-config.xml
运行构建的和/或批处理文件与 eclipse 使用的项目文件不同步,因此构建在开发机器上成功,但在构建机器上失败。
我们开始编写实用程序来将 FlexBuilder 的项目文件转换为{projectname}-config.xml
文件,但它 a) 没有文档,b) 是一个可怕的 hack。
我查看了 -dump-config 开关以获取配置文件,但这有几个问题:1)生成的配置文件具有在我们的环境中不起作用的绝对路径(一些开发人员使用 mac,一些 windows机器)和 2)仅在从 IDE 运行时才能正常工作,因此不能构建到构建过程中。
明天,我们将讨论几个我不太喜欢的选项:
a)向 Subversion 添加一个签入后事件以删除这些绝对引用,或
b)添加一个删除绝对引用的预构建过程。
我不敢相信我们是第一批遇到这个问题的开发人员,但我在 Google 上找不到任何好的解决方案。其他团体是如何处理这个问题的?
build-process - 使用 Rational Robot 进行回归测试
我最初的测试表明,如果没有活动的、可见的桌面,Robot 将无法工作。例如,虽然计划任务(或从持续集成服务器执行的命令)可能能够将机器人作为命令行进程启动,但机器人实际上将无法执行记录的脚本。
登录到构建机器以使其成为“活动桌面”不是可接受的解决方案。
我错过了什么吗?是否可以以不需要物理登录机器的方式在持续集成服务器上运行预先录制的 Rational Robot 脚本?
java - 我可以在命令行中添加 maven 存储库吗?
我知道我可以添加 maven 存储库以在 ~/.m2/settings.xml 中获取依赖项。但是是否可以使用命令行添加存储库,例如:
我想这样做的原因是因为我使用的是持续集成工具,我可以完全控制用于调用 maven 的命令行选项,但是为运行集成工具的用户管理 settings.xml 有点麻烦麻烦。
tfs - 如何在 TFS 的构建中打开代码覆盖率?
在使用 .testrunconfig 文件的解决方案上运行 TFS 构建时,我需要知道如何打开代码覆盖率。
testrunconfig 文件中有一个用于代码覆盖的选项,但是在运行 TFS 构建时没有代码覆盖结果。
我正在使用 *Tests.dll 掩码运行我的测试,而不是使用测试列表 (.vsmdi)。
flash - 在 Flash CS3 中构建 SWF 文件时可以调用外部脚本或程序吗?
每次构建 SWF 文件时,有没有办法从 Flash CS3 调用外部脚本或程序?我想使用 subwcrev 添加颠覆信息 - SVN 关键字不起作用,因为它们仅在更新版本类文件时更新。
visual-studio - 在 Visual Studio 中显示构建时间?
我们的构建服务器花费了太长时间来构建我们的 C++ 项目之一。它使用 Visual Studio 2008。有什么方法可以让 devenv.com 记录在解决方案中构建每个项目所花费的时间,以便我知道应该将精力集中在哪里?
在这种情况下,改进硬件不是一种选择。
我尝试设置输出详细程度(在工具/选项/项目和解决方案/构建和运行/MSBuild 项目构建输出详细程度下)。这在 IDE 中似乎没有任何影响。
从命令行运行 MSBuild 时(对于 Visual Studio 2008,它需要是 MSBuild v3.5),它会在最后显示经过的总时间,但不会在 IDE 中显示。
我真的很想为解决方案中的每个项目提供一份耗时的报告,以便我可以弄清楚构建过程在哪里花费了时间。
或者,由于我们实际上使用 NAnt 来驱动构建过程(我们使用 Jetbrains TeamCity),有没有办法让 NAnt 告诉我每个步骤所用的时间?
build-process - 在多台主机上编译
假设您正在开发需要在多个主机(例如 Linux 和 Windows)上编译和运行的代码,鉴于以下情况,您将如何以最有效的方式执行此操作:
- 您可以完全访问要编译的每个主机的硬件(在我的情况下,一台 Linux 主机和一台站在我办公桌上的 Windows 主机)
- 在网络驱动器上构建太昂贵了
- 不需要提交到中央存储库——假设有一个 CI 引擎会在签入任何内容后立即尝试构建
“高效”意味着使编译-编辑-运行周期尽可能短和简单。
visual-studio-2008 - VS 2008 Post Build Step 搞笑业务
好的,这是我的项目的细分:我有一个带有“Scripts”子文件夹的 Web 项目。该文件夹包含一些 javascript 文件和 JSMin.exe 的副本以及在其中一些文件上运行 JSMin.exe 的批处理文件。我尝试设置“调用“$(ProjectDir)Scripts\jsmin.bat”'的后期构建步骤。当我执行构建时,批处理文件总是“以代码 1 退出”。这通过 Visual Studio 或通过 msbuild 命令行发生。我可以从 Scripts 文件夹手动运行批处理文件,它似乎按预期工作,所以我不确定这里的问题是什么。$(ProjectDir)Scripts\jsmin.bat 调用用引号引起来,因为 $(ProjectDir) 可能有空格(实际上在我的机器上也有)。我不确定此时该怎么做。一世'
理想情况下,我想通过 post 或 pre-build 步骤解决这个问题,这样构建管理器在部署代码时就不必经过额外的步骤。
谢谢!