为夜间建筑节省哪些文物?

时间:2008-10-23 17:19:38

标签: build-process build-automation nightly-build

假设我设置了automatic nightly build。我应该保存哪些构建工件?

例如:

  • 输入源代码
  • 输出二进制文件

另外,我应该保存多久,以及在哪里?

如果我进行持续集成,您的答案会改变吗?

10 个答案:

答案 0 :(得分:17)

为了保存它,你不应该保存任何东西。你应该保存它,因为你需要它(即QA使用每晚构建来测试)。在这一点上,“保存多长时间”变得很长QA想要它们。

我不会像保存标签/标签那样“保存”源代码。我不知道你正在使用什么源代码控制,但对于任何质量的源代码控制系统来说,标记都是微不足道的(性能和磁盘空间)。一旦你的构建被标记,除非你需要二进制文件,否则只是让它们出现没有任何好处,因为你可以在必要时从源代码重新编译。

大多数CI工具允许您标记每个成功的构建。这可能会成为某些系统的问题,因为您每天可以轻松拥有100多个标签。对于这种情况,我建议仍然运行每晚构建并仅标记该。

答案 1 :(得分:6)

以下是我在每次构建时都会保留的一些工件/信息:

  • 您正在构建的快照的标记名称(标记并在构建之前执行干净的结帐
  • 构建脚本自身或其版本号(如果您将它们视为具有自己的版本控制的单独项目)
  • 构建脚本的输出:日志和最终产品
  • 环境快照:
    • 编译器版本
    • 构建工具版本
    • libraries和dll / libs版本
    • 数据库版本(客户端和服务器)
    • ide version
    • 脚本解释器版本
    • 操作系统版本
    • 源代码管理版本(客户端和服务器)
    • 流程中使用的其他工具的版本以及可能影响构建产品内容的所有其他工具。我通常使用一个查询所有这些信息的脚本来执行此操作,并将其记录到应与其他构建工件一起存储的文本文件中。

问自己这个问题:“如果某些东西完全破坏我的构建/开发环境,我需要创建一个新信息,以便我可以重做我的构建#6547并最终得到我第一次得到的完全相同的结果? “

你的回答是你应该在每个版本中保留的内容,它将成为我已经提到的内容的一个子集或超集。

您可以将所有内容存储在您的SCM中(我建议使用单独的存储库),但在这种情况下,您的问题是您应该保留项目的时间有多长。或者您应该将其存储到压缩文件夹或使用构建结果和工件刻录CD / DVD。无论您选择什么,都要备份。

只要您需要它们,您应该存储它们。多长时间,取决于您的开发团队的速度和发布周期。

不,如果你继续进行整合,我认为它不会改变。

答案 2 :(得分:5)

这不是您问题的直接答案,但不要忘记版本控制每晚构建设置本身。当项目结构发生变化时,您可能必须更改构建过程,这将从该点开始破坏旧版本。

答案 3 :(得分:4)

除了其他人提到的二进制文件之外,我还建议您设置一个symbol server和一个source server,并确保您获得正确的信息。它将极大地帮助调试。

答案 4 :(得分:3)

我们保存二进制文件,剥离和未剥离(因此我们有完全相同的二进制文件,一次使用,一次没有调试符号)。此外,我们将所有内容构建两次,一次启用调试输出,一次不启用(再次,剥离和未剥离,因此每个构建结果为4个二进制文件)。根据SVN修订号将构建存储到目录中。这样我们就可以通过简单地检查这个修订版来保留SVN存储库中的源代码(这样也可以存档源代码)。

答案 5 :(得分:3)

我最近了解到的一个令人惊讶的问题:如果您处于可能被审核的环境中,您将需要保存构建的所有输出,脚本输出,编译器输出等。

这是验证编译器设置,构建步骤等的唯一方法。

  

此外,保存它们需要多长时间,以及保存它们的位置?

保存它们,直到你知道构建不会进行生产,只要你有编译位就可以了。

保存它们的一个合理位置是您的SCM系统。另一种选择是使用一种能够自动为你保存它们的工具,比如AnthillPro及其同类产品。

答案 6 :(得分:1)

我们正在做一些接近“嵌入式”开发的事情,我可以告诉你我们保存了什么:

  • SVN版本号和时间戳,以及它构建的机器和由谁(也被刻录到构建二进制文件中)
  • 一个完整的构建日志,显示它是完整/增量构建,数据烘焙工具产生的任何有趣(STDERR)输出,编译的文件列表和任何编译器警告(这压缩得非常好,是文本)
  • 实际二进制文件(适用于1-8版本配置的任何地方)
  • 作为链接副作用生成的文件:链接器命令文件,地址映射和一种“清单”文件,指示最终二进制文件中的内容(CRC和每个的大小),以及调试数据库(.pdb等效)

我们还将对“副作用”文件运行某些工具的结果邮寄给感兴趣的用户。我们实际上并没有将这些存档,因为我们可以在以后重现它们,但这些报告包括:

  • 文件系统大小的总和delta,按文件类型和/或目录分类
  • 代码段大小的总和和delta(。text,.data,.rodata,.bss,.sinit等)

当我们运行单元测试或功能测试(例如冒烟测试)时,这些结果会显示在构建日志中。

我们还没有抛出任何东西 - 鉴于,我们的目标构建通常最终达到每个配置大约16或32 MiB,并且它们是相当可压缩的。

我们确保将二进制文件的未压缩副本保留一周,以便于访问;之后我们只保留轻微压缩的版本。大约每月一次,我们有一个脚本,它提取构建过程产生的每个.zip,并将整个月的构建输出7拉到一起(这样可以利用每个构建只有很小的差异)。

平均每个项目可能有十二个或两个版本...构建服务器大约每5分钟唤醒一次,以检查相关的差异和构建。一个大型非常活跃的项目一个月的完整.7z可能是7-10GiB,但它肯定是负担得起的。

在大多数情况下,我们已经能够以这种方式诊断一切。偶尔会在构建系统上出现打嗝,并且文件实际上并不是构建发生时应该进行的修订,但在日志中通常有足够的证据。有时我们必须挖掘一个了解调试数据库格式的工具,并提供一些地址来诊断崩溃(我们在产品中内置了自动stackdumps)。但通常所需的所有信息都在那里。

我们还没有必要破解.7z档案。但我们有信息,我有一些有趣的想法,如何从中挖掘出有用的数据。

答案 7 :(得分:1)

保存无法轻易复制的内容。我在FPGA上工作,只有FPGA团队拥有这些工具,并且设计的某些内核(库)被许可只在一台机器上编译。所以我们保存输出比特流。但是请尝试相互检查,而不是使用日期/时间/版本标记。

答案 8 :(得分:0)

另存为源代码控制或仅在磁盘上?不保存任何源代码控制。所有派生文件都应该在文件系统中可见,并且可供开发人员使用。不要签入二进制文件,从XML文件生成的代码,消息摘要等。单独的打包步骤将使这些最终产品可用。如果您有更改编号,您可以随时重现构建,当然,假设您构建构建所需的一切都完全在树中,并且可以通过同步对所有构建进行构建。

答案 9 :(得分:0)

我会保存您构建的二进制文件,只要它们有机会投入生产或被其他团队(如QA组)使用。一旦某些东西离开了生产,你用它做什么可能会有很大差异。对于很多团队来说,他们将保留他们最近的先前构建(用于回滚),否则丢弃他们的构建。

其他人有监管要求,要求将任何生产的产品保留长达七年(银行)。如果您是一家产品公司,我会保留客户可能安装的任何二进制文件,以防技术支持人员想安装相同版本。