.net - Jenkins .Net和Docker?

标签 .net jenkins msbuild docker

我绝对是CI(连续集成),DockerVagrant的新手。

我想使用jenkins来构建我的.Net项目构建系统,并使用BitBucket连接到webhook存储库。

我已经看到Docker有一个用于Jenkins的镜像,但是我不知道如何在Docker镜像中使用Jenkins来构建我的.Net项目。因此,.Net项目将执行msbuild脚本,我发现它需要某种.NEt框架安装。是否可以在无所事事的镜像上运行msbuild脚本?

在这种行为中间,流浪者又如何呢?
我希望已经足够清楚。

最佳答案

问题中有几件事可能需要澄清,但我将尝试回答

CI流程是您在将代码库提交到版本控制系统后不断对其进行验证的地方。这可以像编译代码并验证其成功构建一样简单。另外,您可能会运行一套单元测试,将代码部署到环境中并运行集成测试,甚至运行用户接受测试。最好从简单开始并添加层,而不是尝试一劳永逸地完成所有事情,特别是如果您不熟悉CI。

CI流程可提供快速反馈(我刚刚更改的内容是否破坏了某些内容),从而增强了您的代码库稳定且值得发布的信心。您进行的自动化测试越多,您对所做的更改就越有信心并且没有意外副作用的信心就越大。 CI的构建应尽可能快。这个想法是为了获得快速的反馈,因此,如果您的构建花费90秒,那就太好了。开发人员无需等待很长时间即可确定是否损坏了某些东西。如果花费90分钟,则开发人员将无法及时获得反馈,因此可能已移至其他任务(or is sat around waiting for the build to complete)。这意味着他们可能正在更改损坏的代码库。有些人使用咖啡测试。也就是说,如果构建所花的时间比开发人员去喝杯咖啡然后回到他们的办公桌所花费的时间长,那么它会花费太长时间。

您可以使用Jenkins实现CI,这是一个不错的选择,因为它有许多可用的插件来帮助您在CI流程中添加图层。它周围还有一个很大的社区,因此会定期添加新的工具和技术,并且如果您有任何问题,那里会有很多知识渊博的人可以提供帮助。

要运行像Jenkins这样的CI服务器,您需要将其安装在某个地方。通常,这是在专用服务器上。如果要构建.net代码,则它将是Windows服务器。 (虽然.net核心现在是OSS并可以在Linux上运行,但现在的.net应用不太可能在不费吹灰之力的情况下在Linux上编译,这可能会随着.net核心的发展和更多功能的完善而改变)

Here is a good "getting started"指南,用于安装Jenkins并将其设置为构建.net应用程序。

您提到的Docker容器将是在基于Linux的环境中轻松部署Jenkins服务器的一种方式。正如ZeissS所提到的,在Windows上尚未提供容器支持。

话虽如此,如果您有可用的Linux基础架构,则可以使用docker设置服务器并使用基于Windows的代理或从属服务器执行实际构建。使用slave很好,因为您可以同时执行多个构建。如果您有多个解决方案和/或庞大的开发团队,那么即使您将Windows用于Jenkins服务器,也可能要利用它们。

Vagrant允许您基于模板创建虚拟机。这意味着机器是一致的。

它可以在许多地方使用。例如,您可以使用它来为您的构建过程创建从属计算机,或者启动一个环境来运行集成/用户接受测试。请记住,尽管CI是关于快速反馈的,所以如果您正在考虑将一次性机器用于奴隶或环境,那么您需要考虑创建新机器花费的时间。我发现一个很好的用途是创建一个模板,该模板用于构建在devs工作站上运行的VM,以在提交更改之前进行本地测试。您也可以使用它为运行时间更长的构建(每晚)创建环境,在该环境中运行更全面的测试集或为应用程序构建完整的代码库,而不仅仅是提交已更改的组件。

最后,我想说的是,尽管您可以使用Jenkins或任何其他CI服务器来处理将代码部署到环境中。我更喜欢使用像Octopus Deploy这样的发布管理工具,您可以从Jenkins触发它,它可以开箱即用地处理您的许多部署需求(将代码推送到远程计算机,配置应用程序池/ Windows服务等)。考虑。

关于.net - Jenkins .Net和Docker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619112/

相关文章:

c# - 如何在 C# 中处理动态加载的托管库

jenkins - BlueOcean编辑器 "scm"输入什么

jenkins - 使用rabbitmq消费者插件配置gerrit触发器

visual-studio-2008 - 迁移文件问题-"Project Not Exists"

c# - 运行 Docker 时无法识别命令

.net - 创建具有可浏览、可扩展字段的属性

c# - 如何删除DataGridView中特定链接单元格的下划线

c# - ReaderWriterLockSlim 什么时候比简单的锁更好?

GitLab:编辑 merge 请求描述会触发发送 merge 请求 Hook

visual-studio - 00 :15:00 minutes because of Testimpact 之后的构建超时