之前写过一篇文章是在CentOS上构建.net自动化编译环境, 今天这篇是针对于Windows平台的环境。
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,
Jenkins是由Sun的前员工开发的,它的根基是Java,但也可以用在非Java的项目里,比如PHP、Ruby on Rails、.NET。持续集成相关的工具有很多。它提供了Web界面,用户可以在界面
上配置Job,每个Job都包含一系列的构建步骤。Jenkins可以完成开头那个场景中所提到的所有验证工作,它还能更进一步做自动化部署或者一键式部署。
我们开始吧, 环境 Windows Server 2012
1. Install Jenkins
http://ftp-nyc.osuosl.org/pub/jenkins/windows/jenkins-1.629.zip
2. Install MsBuild, Git Plugin for Jenkins
GIT client plugin
Shared library plugin for other Git related Jenkins plugins.
GIT plugin
This plugin integrates GIT with Jenkins.
MSBuild Plugin
This plugin makes it possible to build a Visual Studio project (.proj) and solution files (.sln).
SCM API Plugin
This plugin provides a new enhanced API for interacting with SCM systems.
Credentials Plugin
This plugin allows you to store credentials in Jenkins.
插件可以在这儿找到 https://wiki.jenkins-ci.org/display/JENKINS/Plugins
3. Install Git
从官网下载安装 http://www.git-scm.com/downloads
4. Install .net Framework 4.5.2
官网下载安装 http://www.microsoft.com/en-us/download/details.aspx?id=42642
5. Install 微软Build Tools 2013
官网下载安装 http://www.microsoft.com/en-us/download/details.aspx?id=40760
6. 假设本地已安装VS2013, 复制本地 C:\Program Files (x86)\MSBuild\Microsoft 下所有文件到服务器相同位置上
笔者是看到是这些文件
打包放置到服务器上面对应路径。
7. Install Web Deploy v3.0
官网下载安装 http://www.iis.net/downloads/microsoft/web-deploy
8. Install Artifact Deployer Plugin
This artifact allows you to choose which directories you will like to deploy to the target destination
https://wiki.jenkins-ci.org/display/JENKINS/ArtifactDeployer+Plugin
Jenkins的系统配置
Git配置
MsBuild配置
邮件
其它问题
1. 编译时转换Web.config文件
例如, 我们需要在Release模式下,替换Web错误显示机制,数据库连接字符串, 日志文件输出级别或目录等配置都可以。
If you add the following xml to the bottom of the .csproj file for your web application, you‘ll ensure that the config transformation occurs before every build:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> <Target Name="BeforeBuild"> <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> </Target>
Edit: In response to your comment, you should be able to use Web.config as the source parameter in the TransformXml task (see step #2). If you only want to perform the config transform in the build script, follow these instructions:
1) Import WebApplication.targets in your build script like so:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
2) Execute the TransformXml build task in your build script target:
<Target Name="MyBuildScriptTarget"> <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> ...other build tasks... </Target>
转换NLog.config,也可以参考Web.config,实现NLog.Debug.config与Nlog.Release.config, 如下示例的NLog.Release.config文件:
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <targets async="true"> <target xdt:Transform="Insert" name="elastic" xsi:type="ElasticSearch" uri="http://10.1.101.54:9200/" index="WebAppInit" documentType="logevent"> <field name="logger" layout="${logger}" layoutType="System.String" /> </target> </targets> <rules> <logger xdt:Transform="Insert" name="*" minlevel="Trace" writeTo="elastic" /> </rules> </nlog>
上面我们在Release模式下,增加了NLog输出到ElasticSearch的配置节。
2. Microsoft.Build.Tasks.v4.0编译问题Build Failure issue:
could not be loaded from the assembly "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Build.Tasks.v4.0.dll". Could not load file or assembly ‘file:///C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Build.Tasks.v4.0.dll
Ideally you should be doing the following:
1) Open your NuGet.targets file: C:\Builds\1\xxxx\FTP Processor (New)\src.nuget\nuget.targets
2) Identify the task referencing the old DLL.
<UsingTask AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" TaskFactory="CodeTaskFactory" >
...
3) Then future proof it like so:
<UsingTask AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v$(MSBuildToolsVersion).dll" TaskFactory="CodeTaskFactory" >
...
3. Git中文乱码问题
进入git安装目录,改一下配置就可以基本解决:
etc\gitconfig:
[gui] encoding = utf-8 [i18n] commitencoding = gbk [svn] pathnameencoding = gbk
说明:打开 Git 环境中的中文支持。pathnameencoding设置了文件路径的中文支持。
4. 资料
源代码: https://github.com/kohsuke/hudson
总结
持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。集成软件的过程不是新问题,如果项目开发的规模比较小,比如一个人的项目,如果它对外部系统的依赖很小,那么软件集成不是问题,但是随着软件项目复杂度的增加(即使增加一个人),就会对集成和确保软件组件能够在一起工作提出了更多的要求-要早集成,常集成。早集成,频繁的集成帮助项目在早期发现项目风险和质量问题,如果到后期才发现这些问题,解决问题代价很大,很有可能导致项目延期或者项目失败。
本文简单介绍了持续集成的概念并着重介绍了如何基于 Jenkins 快速构建持续集成环境。通过具体实例的描述,相信读者对 Jenkins 的基本功能和实现方法有个更清楚地认识和理解。其实,Jenkins 的功能远不至文中所述的这些,Jenkins 还有详尽的日志处理和持续集成构建状态的分析等功能。希望在进一步的学习和应用中与大家分享。
希望对您企业应用开发与企业信息化有帮助。 其它您可能感兴趣的文章:
IT基础架构规划方案二(计算机系统与机房规划规划)
IT基础架构规划方案三(IT基础软件和系统规划)
如有想了解更多软件研发 , 系统 IT集成 , 企业信息化 等资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。