我应该什么时候“发布”我的构建?

2023-12-27

我们刚刚开始在我们的一个项目中使用 Visual Studio 发布管理,但我们的工作方式已经遇到了一些问题。

目前,我们已经创建了一个发布阶段,它负责将我们的构建工件部署到专用虚拟机上进行测试。我们打算稍后使用这台机器来运行我们的集成测试。

现在,我们有一个门控签入构建过程:每次签入都会触发所有单元测试,并且我们将发布触发器配置为在此构建上发生。起初,每次签入后,都会部署项目并执行集成测试,这似乎是合理的。我们注意到所有已发布的版本都污染了发布管理上的控制台,并且所有版本都被标记为“无限期保留”,并且我们的放置文件夹位置正在快速增长(看到这一点后,该工具自动执行此操作是有道理的,因为人们可以将任何构建提升到另一个阶段,并且需要保留工件)。

那么问题是:我们做错了什么?我一直在思考这个问题,“释放”每次签到确实没有任何意义。我们可能应该在冲刺结束时开始这个发布过程,这一点可以被视为“候选发布”。

如果我们这样做,我们将如何以及何时运行自动化集成测试?我的意思是,在我们的例子中,运行这些程序需要一个部署过程,如果我们尝试使用其他方法来实现这一点(如 LabTemplate 构建过程),我们最终将重复部署代码。

这里最好的方法是什么?


如果不深入你的组织并看看你是如何做事的,很难说,但我会尝试一下。

首先,我通常会避免门控签入构建,除非经常出现损坏构建的问题。如果损坏的构建不是一个痛点,请不要使用门控签入。为什么?简单:如果您的构建/测试过程需要 10 分钟才能运行,那么我必须等待 10 分钟才能知道我是否可以继续工作,或者我的更改是否会被踢回给我。它不鼓励小规模、频繁的签入,而鼓励大规模、无上下文的签入。

开发人员 B 还需要等待 10 分钟才能获取开发人员 A 的最新更改。如果开发人员 B 需要签入才能继续工作,那就是浪费时间。相信您的 CI 流程能够捕获损坏的构建,并相信您的开发人员能够承担责任并在极少数情况下修复它们。

更合适的做法是(取决于您的分支策略)针对您的主干进行门控签入,然后针对您的开发/功能分支进行 CI 构建。当然,这开启了整个“当我有多个分支时如何构建一次/部署多次?”罐头蠕虫。 :)

如果您的集成测试很慢并且需要部署才能成功,那么它们可能不适合作为 CI 的一部分运行。有一个 CI/门控签入构建:

  • Builds
  • 快速运行单元测试
  • 运行高优先级、非基于部署的集成测试

然后,进行第二次构建(计划的或滚动的),实际部署并运行整个测试套件。你可以根据自己的喜好安排时间——我通常在中午去一次(或者团队中所谓的“午休”时间),在午夜去一次。这样,您就可以从上午的工作中获得经过测试的构建,并从下午的工作中获得一个经过测试的构建。

使用发布默认模板,您可以将计划的构建目标定为“dev”(/test/integration/无论您如何称呼它)阶段。当您准备好实际发布构建时,您可以使用针对生产的特定构建启动新版本,并让它正常经历所有阶段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该什么时候“发布”我的构建? 的相关文章

  • OpenSSL SSL_connect:SSL_ERROR_SYSCALL VS2017 社区/TFS

    我无法将本地 git 与 Visual Studio 在线同步 这是我得到的错误 Git 因致命错误而失败 无法访问 https mysite visualstudio com DefaultCollection git MajorMain
  • TFS2010 - SourceGetVersion 中出现错误的变更集

    我目前正在设置 Team Foundation Server 2010 在执行构建时我发现了一个非常奇怪的行为 情况说明 我们有2家分行 发展 Main 所有开发人员仅将代码签入开发分支 构建经理每天一次将一些变更集合并到主分支 在开发分支
  • 使用 TFS 在线服务构建时,有什么方法可以签署 Clickonce 应用程序吗?

    我已在我的单击一次应用程序中启用了签名 但构建服务器 TFS在线服务 没有证书 有什么方法可以将证书包含在存储库中并让构建服务器对其进行签名 或者我是否必须禁用签名并在之后手动执行此操作 我没有从商店中挑选证书 而是签入文件并从文件中挑选
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 如何正确使用“mvn release:prepare”?

    我尝试了这个命令 用dryrun在我的 Maven 项目上进行测试 mvn release clean release prepare DdryRun true DgenerateBackupPoms false Dtag solocal
  • Jenkins + Gradle + Artifactory:无法读取生成的构建信息

    我正在尝试使用 Jenkins Pipeline 调用 Gradle 工具 将我的工件推送到 Artifactory 我正在关注 GitHub 上发布的示例 Example1 https github com JFrogDev projec
  • XAML 构建的本地 TFS 到 VSTS 迁移

    目前 我们在本地使用 TFS 2017 update 1 但我们必须在 VSTS 云平台上迁移 TFS 此外 我们还使用自定义构建模板在本地使用 TFS 构建服务器进行 XAML 构建 我们的问题是迁移后所有 XAML 构建定义是否都能正常
  • 将文件从一个 Team Foundation 项目移动到另一个 Team Foundation 项目

    我们的项目已经达到了需要将一些代码拆分到一个单独的团队基础项目中的地步 我们希望移动这些文件 以便它们保留其版本控制历史记录 我们暂时将文件复制回原始团队基础项目并重新添加它们 以便我们的日常构建和测试过程不会中断 由于我们能够修改构建和测
  • 如何防止TFS 2013锁定二进制文件?

    我们将 TFS 2013 与 Visual Studio 2013 结合使用 并使用门控签入 通过门控签入 不可能在本地保留待处理的更改 如果其中一个文件被锁定 http www neovolve com 2011 07 18 unable
  • 使用 Hudson 将构建与部署分开

    我们已经开始使用Hudson 目前的工作流程是 本地签出 gt 代码 gt 运行测试 gt 更新 gt 运行测试 gt 提交 Hudson 并不进行轮询 而是只是坐在那里 直到我们实例化构建 然后它 本地结帐 gt 运行 Phing 脚本
  • 在 TFS 下的 CI 队列上构建时包未恢复(VS Online VS2015)

    我问过一个关于构建错误的问题 https stackoverflow com questions 34808954 build errors of missing packages in visual studio online并继续由我绝
  • Gitlab CI服务端口是如何暴露的?

    我有一个 gitlab ci yml file integration test services name registry gitlab com group project testmailserver 1 1 alias mail e
  • 自动部署资源

    我足够了解我们需要通过单个用户操作来部署我们的应用程序 但是 我don t know 在 NET 商店中可以使用哪些好工具 您如何管理每个环境的配置更改 有人可以给我指出一些用于持续集成的好资源吗 我希望看到一些理论以及逐步的实践指南 Ed
  • AWS CodeBuild - 如何跳过构建

    我的构建是在每次推送到存储库和每次拉取请求时触发的 因此 CODEBUILD SOURCE VERSION 看起来像 pr 8 或 4570d2e7158cfef687af8da31d1ffec7b02e5ca3 我只希望为 pr 分支执行
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 使用 TFS REST API 获取迭代中的所有工作项

    我正在尝试获取有关当前冲刺中所有用户故事的一些信息 我可以轻松获取当前冲刺的路径 并且给定工作项的 ID 列表 我可以从其中获取所需的内容 但我不确定如何从迭代路径获取这些 ID 我见过使用 C 和查询的示例 但我使用的是 javascri
  • PowerShell(2.0,32 位)无法加载 TFS 2010 管理单元...除非可以

    我有一个与 Team Foundation Server 交互的 PowerShell 脚本 当我在 PowerShell 控制台中运行它时 它运行得很好 这对于测试它来说很好 但我想通过双击它或批处理文件或其他东西来运行它 我什至选择右键
  • 团队构建 - 获取工作空间 - 从特定路径获取最新信息,而不是所有内容

    我有一个简单的构建定义 我想用它来构建一个项目 每次我选择运行此构建时 我都想从仅与相关项目相关的分支 目录中获取最新信息 我怎么做 对 获取工作空间 的调用得到一切来自源代码控制 并且出于各种原因 我不想 或需要 从所有内容中获取最新信息
  • 如何通过运行构建队列重新启动 Jenkins?

    我们的 Jenkins 执行大量集成测试 詹金斯运行的时间越长 测试所需的时间就越长 因此 我们每天晚上通过 cronjob 重新启动 Jenkins 服务器 同时 构建队列太长而无法完成 当前正在运行的作业被取消并失败 那太丑了 我找到了

随机推荐