如何以及为何设置 C# 构建机器? [关闭]

2023-12-30

我正在与一个小型(4 人)开发团队合作开发一个 C# 项目。我建议设置一台构建机器来进行项目的夜间构建和测试,因为我知道这是一件好事。问题是,我们这里没有太多预算,所以我必须向当权者证明这笔开支是合理的。所以我想知道:

  • 我需要什么样的工具/许可证?现在,我们使用 Visual Studio 和 Smart Assembly 进行构建,并使用 Perforce 进行源代码控制。我还需要其他东西吗,或者是否有相当于 cron 作业的东西来运行自动化脚本?
  • 除了表明构建已损坏之外,这到底会给我带来什么?我是否应该在此解决方案(sln 文件)中设置将由这些脚本运行的测试项目,以便我可以测试特定的功能?目前,我们有两个这样的测试,因为我们没有时间(或者坦率地说,没有经验)来进行良好的单元测试。
  • 为此我需要什么样的硬件?
  • 一旦构建完成并经过测试,通常的做法是将其构建到 ftp 站点上还是通过其他方式进行内部访问?这个想法是这台机器使the构建,我们都会进行它,但如果需要的话可以进行调试构建。
  • 我们应该多久进行一次这种构建?
  • 空间如何管理?如果我们每晚进行构建,我们应该保留所有旧的构建,还是在大约一周左右开始抛弃它们?
  • 还有什么我在这里没有看到的吗?
  • 我意识到这是一个非常大的话题,而我才刚刚开始。我在这里找不到这个问题的重复项,如果我应该得到一本书,请告诉我。

    编辑:我终于开始工作了! Hudson 非常棒,FxCop 表明我们认为已实现的一些功能实际上并不完整。我们还必须将安装程序类型从 Old-And-Busted vdproj 更改为 New Hotness WiX。

    基本上,对于那些关注的人来说,如果您可以从命令行运行构建,那么您可以将其放入 hudson。通过 MSBuild 从命令行运行构建本身就是一项有用的练习,因为它迫使您的工具保持最新状态。


    Update: Jenkins http://jenkins-ci.org/是 Hudson 的最新版本。现在每个人都应该使用 Jenkins。我将相应地更新链接。

    Hudson https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins是免费的,并且非常容易配置,并且可以轻松地在虚拟机上运行。

    部分来自我的旧帖子:

    我们用它来

    • 部署Windows服务
    • 部署网络服务
    • 运行 MSTests 并显示与任何 junit 测试一样多的信息
    • 跟踪低、中、高任务
    • 趋势图警告和错误

    以下是 Hudson 支持的一些内置 .net 内容

    • MSBuild https://wiki.jenkins-ci.org/display/JENKINS/MSBuild+Plugin
    • NAnt https://wiki.jenkins-ci.org/display/JENKINS/NAnt+Plugin
    • MSTest https://stackoverflow.com/questions/352703/integrating-hudson-with-ms-test/512092#512092
    • Nunit https://wiki.jenkins-ci.org/display/JENKINS/NUnit+Plugin
    • 团队基础服务器 https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin
    • fxcop https://wiki.jenkins-ci.org/display/JENKINS/Violations
    • stylecop https://wiki.jenkins-ci.org/display/JENKINS/Violations
    • 编译器警告 https://wiki.jenkins-ci.org/display/JENKINS/Warnings+Plugin
    • 代码任务 https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin

    另外,上帝禁止你使用安全的视觉源,它也支持这一点 https://wiki.jenkins-ci.org/display/JENKINS/Visual+SourceSafe+Plugin。我建议你看一下Redsolo 关于使用 Hudson 构建 .net 项目的文章 http://redsolo.blogspot.com/2008/04/guide-to-building-net-projects-using.html

    你的问题

    • Q:我需要什么样的工具/许可证?现在,我们使用 Visual Studio 和 Smart Assembly 进行构建,并使用 Perforce 进行源代码控制。我还需要其他东西吗,或者是否有相当于 cron 作业的东西来运行自动化脚本?

    • A:我刚刚在 VM 的新副本上安装了 Visual Studio,该 VM 运行全新的、已修补的 Windows 服务器操作系统安装。所以你需要许可证来处理这个问题。 Hudson 会将其自身安装为 Windows 服务并在端口 8080 上运行,您将配置希望它扫描代码存储库以获取更新代码的频率,或者您可以告诉它在特定时间进行构建。全部可通过浏览器进行配置。

    • Q:除了表明构建已损坏之外,这到底会给我带来什么?我是否应该在此解决方案(sln 文件)中设置将由这些脚本运行的测试项目,以便我可以测试特定的功能?目前,我们有两个这样的测试,因为我们没有时间(或者坦率地说,没有经验)来进行良好的单元测试。

      A:第一次构建失败或变得不稳定时,您将收到一封电子邮件。如果单元测试失败,则构建不稳定,或者可以通过您设置的任意数量的标准将其标记为不稳定。当单元测试或构建失败时,您将收到电子邮件,其中会告诉您失败的地点、原因和方式。根据我的配置,我们得到:

      • 自上次工作构建以来的所有提交列表
      • 这些提交的提交注释
      • 提交中更改的文件列表
      • 构建本身的控制台输出,显示错误或测试失败
    • Q:为此我需要什么样的硬件?

      A:一个虚拟机就足够了

    • Q:一旦构建完成并经过测试,通常的做法是将其构建到 ftp 站点上还是通过其他方式进行内部访问?我们的想法是,这台机器进行构建,我们都可以进行构建,但如果需要的话可以进行调试构建。

      A:Hudson 可以用它做任何您想做的事情,包括通过 md5 哈希对其进行 ID 识别、上传、复制、存档等。它会自动执行此操作,并为您提供构建工件的长期运行历史记录。

    • Q:我们应该多久进行一次这种构建?

      A:我们每小时轮询 SVN,寻找代码更改,然后运行构建。每晚还可以,但在我看来有点毫无价值,因为当你早上上班时,你昨天所做的事情不会在你的脑海中记忆犹新。

    • Q:空间如何管理?如果我们每晚进行构建,我们应该保留所有旧的构建,还是在大约一周左右开始抛弃它们?

      A:这取决于你,经过这么长时间,我将构建工件移动到长期存储或删除它们,但是存储在我保留的文本文件/xml 文件中的所有数据,这让我可以将更改日志、趋势图等存储在服务器占用的空间非常小。您还可以将 Hudson 设置为仅保留尾随构建中的工件

    • Q:还有什么我在这里没有看到的吗?

      A:不,现在就去找 Hudson,你不会失望的!

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

    如何以及为何设置 C# 构建机器? [关闭] 的相关文章

    • 如何使用 C# 中的参数将用户重定向到 paypal

      如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
    • WCF RIA 服务 - 加载多个实体

      我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
    • 按成员序列化

      我已经实现了template
    • ASP.NET MVC:这个业务逻辑应该放在哪里?

      我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
    • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

      这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
    • 使用实体框架模型输入安全密钥

      这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
    • C++ OpenSSL 导出私钥

      到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
    • 创建链表而不将节点声明为指针

      我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
    • while 循环中的 scanf

      在这段代码中 scanf只工作一次 我究竟做错了什么 include
    • 转发声明和包含

      在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
    • 如何序列化/反序列化自定义数据集

      我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
    • 使用 x509 证书签署 json 文档或字符串

      如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
    • 覆盖子类中的字段或属性

      我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
    • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

      我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
    • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

      我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
    • IEnumreable 动态和 lambda

      我想在 a 上使用 lambda 表达式IEnumerable
    • C# - OutOfMemoryException 在 JSON 文件上保存列表

      我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
    • 如何在文本框中插入图像

      有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
    • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

      我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
    • 使用.NET技术录制屏幕视频[关闭]

      Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

    随机推荐

    • 谷歌地图带有标题的矩形/多边形

      如何向 google maps Rectangle 和 google maps Polygon 添加标题 标题属性在以下时间内不可用矩形选项 https developers google com maps documentation ja
    • 在 RowUpdating 期间获取 GridView 内标签的旧值 (ASP.NET GridView) C#

      我一直在努力寻找一种方法来获取 GridView 中标签的 旧 值 我尝试使用hiddenFields来保存它们 这会给我这个错误 使用hiddenFields时出错 https i stack imgur com RuJYN png 我也
    • 模拟 Moq C# 中运算符的行为

      希望你一切顺利 我正在使用 C 中的 Moq 创建一些测试 我正在模拟的对象之一已覆盖 gt 和 有谁知道它是否可能 如果可以的话如何 配置一个模拟对象来复制它 我问的原因是我试图注入一个模拟存根 因为我得到的一些遗留代码具有深刻而肮脏的依
    • 在 C++ 中处理 C# COM 事件

      我已经成功创建了一个带有事件的 C COM 对象 请找到下面的代码 Guid 1212674 38748 45434 public interface ICalculator int Add int Num1 int Num2 Interf
    • 自动加载结果一遍又一遍地获取相同的结果

      我已经实现了以下自动加载代码 它从数据库获取结果 但它不断循环相同的结果 php code
    • 防止用户在 Rails 中多次投票

      我在博客模型中设置了一个简单的评级系统 我使用自定义方法来提高评分 该评分是博客数据库中的整数 def increase post Post find params id increment rating if logged in curr
    • 如何在 SQL Server 中检查 Is not Null 和 Is not Empty 字符串?

      我们如何检查 SQL ServerWHERE条件列是否不为空且不为空字符串 如果您只想将 匹配为空字符串 WHERE DATALENGTH COLUMN gt 0 如果要将任何完全由空格组成的字符串计为空 WHERE COLUMN lt g
    • 带通巴特沃斯滤波器的 C++ 实现

      我正在使用 openCV 和 c 实现图像分析算法 但我发现 openCV 官方没有任何巴特沃斯带通滤波器的功能 在我的项目中 我必须将时间序列像素传递到巴特沃斯 5 阶滤波器中 该函数将返回过滤后的时间序列像素 Butterworth 像
    • 如何在 SSIS 中为父包和子包设置 OnError 事件

      我使用的是 2016 版本 有一个主 ETL Extract 包 我在其中使用执行包任务执行三个子包 ABC DEF XYZ 我想捕捉System Error Description对于任何这些子包中发生的任何错误 必须通过父包以电子邮件形
    • Yii2 使复选框为必填项不起作用

      这是我的表格
    • 有没有办法在 HTA 中设置 GUI 的 Alpha 通道以使其透明?

      Like Teemu说我把蚂蚁 现在它的工作方式很奇怪 GUI 不透明 但颜色更清晰 因此设置 Alpha 通道就像减少RGB颜色并且不设置 GUI 的透明度 有没有办法让主 GUI 透明 HTA 图形用户界面
    • Google Cloud-Builder如何构建除master之外的所有分支

      我希望能够构建所有不是主分支的分支 但是当我尝试时 master UI 正确显示所有非主分支 但保存会返回 HTTP 400 错误 error code 400 message trigger template branch name is
    • 接口范例性能(动态绑定与泛型编程)

      虽然动态绑定和模板的核心本质上是不同的东西 但它们可以用来实现相同的功能 代码示例 仅供参考 A 动态绑定 namespace DB interface class CustomCode public virtual void operat
    • 我应该将 Java 中的静态嵌套类重构为单独的类吗?

      我继承了包含静态嵌套类的代码 public class Foo Foo fields and functions private static class SGroup private static Map
    • 有 PHP 代码混淆器吗? [关闭]

      就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
    • 将 ServerValue.TIMESTAMP 转换为日期

      我已放置一个按钮将当前日期和时间保存到 My Firebase Database private void saveTime DatabaseReference rootRef FirebaseDatabase getInstance ge
    • 在Windows 7上用Python快速获取屏幕上某些像素的颜色

      我需要获取屏幕上或活动窗口中某些像素的颜色 我需要这样做quickly 我尝试过使用 win32gui 和 ctypes windll 但它们太慢了 这些程序中的每一个都获取 100 像素的颜色 import win32gui import
    • 当按钮位于列表中时,ListView 长按不起作用

      我有一个带有自定义列表适配器的 ListView 它有 OnItemClickListener 和 OnItemLongClickListner 它们曾经工作得很好 之后 我必须在列表项的布局中放置一个按钮 并且项目单击和长按侦听器停止工作
    • JSF 2 中的范围

      我有一个 CRUD 应用程序 数据在哪里获取 显示 编辑 存储回数据库 此外 页面之间存在顺序访问 第二页需要输入在第一页上输入的信息 依此类推 最佳范围是什么以及为什么 何时使用哪个范围 每个范围的生命周期是什么 另外 我找不到任何关于范
    • 如何以及为何设置 C# 构建机器? [关闭]

      Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在与一个小型 4 人 开发团队合作开发一个 C 项目 我建议设置一台构建机器来进行项目的夜间构建和测试 因为我知道这是一件好事 问