持续集成 Jenkins 部署.NET 自动化构建

Heyniu · 2017年08月18日 · 最后由 渐次消逝 回复于 2017年08月25日 · 4178 次阅读

最近在学习 Jenkins,为公司的持续集成迈出第一步。初步设想是所有在研项目都接入到持续集成环境中,目前正在往这个方向努力中。

安装.NET 环境

Jenkins 的安装部署等,不在本文的范畴,社区有大量相关文章作为参考。

  • .NET Framework 4.6.2(最新版,可根据实际情况调整)
  • .NET Framework 4.6.2 Developer Pack(开发包)
  • Microsoft Build Tools 2015
  • NuGet

.NET 的构建需要上述的几个环境,前三个环境根据提示安装即可,最后一个是不用安装的,放在一个目录下即可。

安装 MSBuild

打开 Jenkins 系统管理,找到管理插件选项,点击进入,切换到可选插件选项卡在搜索框输入 MSBuild 搜索。在搜索结果中找到 MSBuild 插件并安装。

配置 MSBuild

打开 Jenkins 系统管理,找到 Global Tool Configuration 选项,点击进入。找到 MSBuild 并配置如下

MSBuild 的一般路径是C:\Program Files (x86)\MSBuild\15.0\Bin ,图中使用的是 VS2017 中的 MSBuild。

新建 Jenkins Job

  • 新建一个 Job

  • 源码管理

此项目是多项目依赖,主项目有依赖一个公共类库(单独项目)

选择 Multiple SCMs 的原因:

1. 项目中存在依赖的情况,单纯的一个 Git 仓库地址是不能搞定的。
2. 如果项目是单一项目,可以直接选择 Git 配置。
3. 如果是多项目依赖的情况需要安装Multiple SCMs插件。

  • 构建触发器

此处设置为检测到更新就自动拉取代码并编译项目

日程表用法自行百度

  • 构建

    • 使用 NuGet 下载依赖

    新建一个批处理命令Execute Windows batch command ,首先指定NuGet 路径,restore 命令是还原程序包(依赖)的意思,最后指定需要还原的sln 解决方案。

    • 配置 MSBuild 构建参数

    新建一个Build a Visual Studio project or solution using MSBuild ,首先选择MSBuild 版本,再次输入sln 的名称,一般在项目的根目录,如果不是需要指定其路径,最后填写编译参数。

    MSBuild 命令参考

  • 构建项目

保存项目后,回到项目页面,点击立即构建,可以看到项目正在构建中。点击这个正在构建的任务查看控制台输出,可以看到项目最终是构建成功了。

构建结果的通知

  1. 如果一切顺利,你将成功的构建好了.NET 项目,代码的每次签入都会触发构建器去构建项目,构建的结果一般是以邮件的形式通知到相应的负责人。
  2. 由于邮件通知的时效性,可能由于种种原因相应的负责人没收到邮件或者压根没看邮件,不能起到及时处理构建失败的原因,我在想一个替补方案。
  3. 企业微信应该很多公司都在用,如果能以系统通知的形式通知到相应的负责人,那么这种处理方式会比邮件通知好很多。
  4. 理论上是可行的,待实践成功后另外发表一篇文章分享给大家。

踩坑记录

由于第一次接触.NET 项目,在构建过程中遇到各种问题,有环境问题,有其他问题,下面记录下遇到的主要问题以及解决方案,供大家参考。

  • error CS1056: 意外的字符 “$”

这是因为项目中采用了 C# 6.0 的新特性,编译工具的版本太老导致的

issues

我们只要升级 MSBuild 即可,第一次安装的是Microsoft Build Tools 2013 ,改完安装Microsoft Build Tools 2015

  • 找不到Microsoft.WebApplication.targets 文件

这个忘记是怎么解决的了,大概还是因为 MSBuild 的版本问题还是没有安装Microsoft Build Tools 导致的

  • 找不到程序集(依赖)

起初是根据错误提示,找到相应的文件并打开,查看它引用的目录在哪,然后从开发那里(开发那边能编译通过)拷贝对应的文件过来,最后是编译通过了。但还是觉得很麻烦,万一依赖升级了或者有其他变动呢,难道没有像安卓一样有gradle 这种工具,自动下载依赖?

后来了解到可以通过NuGet 来完成,所以问题也都解决了。

分享预告

  • Jenkins 部署 Android 自动化构建
  • Jenkins 部署 iOS 自动化构建
  • Jenkins 部署接口日常监控
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

很少看到 WEB 自动化构建的文章,赞一个。

多谢支持

请问楼主知道这个报错怎么解决吗?
CSC : fatal error CS2008: No inputs specified

在 win7 上编译是没问题的,在 XP 上就报这个错

渐次消逝 回复

不知道哦,你自己查资料吧,现在没什么人用 xp 了吧,你那破电脑是不是要换了

Heyniu 回复

公司要求软件要兼容 XP 以上,我也苦啊

渐次消逝 回复

你查资料吧,应该能找到方法的,我不会写.net

Heyniu 回复

好的,谢谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册