使用的工具及技术:
1、Jenkins安装、部署
2、JenkinsTFS配置 MSBuild配置
3、Jenkins分发程序(xcopy、Azure、net、PsExec、ServerManager)
Jenkins官网下载地址https://jenkins.io/content/thank-you-downloading-windows-installer/#stable(Windows),下载安装后,可以访问http://localhost:8080/进行用户设置登录。
系统管理--》插件管理:安装Team Foundation Server Plug-in和MSBuild Plugin。
系统管理--》系统设置:配置tfs
系统管理—》Global Tool Configuration:配置MSBuild
新建一个构建项目和简单配置
碰到的问题有:
1. Querying for remote changeset at '$/MData/SourceCode/MasterData3.0-Release/' as of 'D2017-05-05T05:50:40Z'...
Query returned no result!
原因是tfs工程路径错误
2.FATAL:com.microsoft.tfs.core.exceptions.TECoreException: 工作区 Hudson-MData-MASTER;hexiaoer 已存在于计算机MACBOOK 上。
原因是工程名称与TFS重名,需要修改Jenkins工程名称。
3.构建后出现error。
原因一般都是tfs上项目编译出现了问题,要先将源码在vs上编译通过,再构建。如果还是不行就要查看项目编译的MSBuild和Jenkins配置的MSBuild环境是否一致。
分发的核心代码(就是配置的Publisher.exe)有:
Net: (系统自带)
var info = new ProcessStartInfo()
{
Arguments= @" use \\10.2.13.23 "111111"/user:administrator",
FileName= "net.exe",
WindowStyle= ProcessWindowStyle.Hidden
};
var process = Process.Start(info);
process.WaitForExit();
process.ExitCode;
Xcopy:(系统自带)
var info = new ProcessStartInfo()
{
Arguments= @" D:\Deployment\Agent \\10.2.13.23\C$\Deployment /E /I /R /Y",
FileName= "xcopy.exe",
WindowStyle= ProcessWindowStyle.Hidden
};
var process = Process.Start(info);
process.WaitForExit();
process.ExitCode;
PsExec:(需要下载,在目标服务器要有psexec服务运行,如果没有调用exe会没效果)
var info = new ProcessStartInfo()
{
Arguments= @" \\10.3.2.8 -u administrator -p qwe111! -cC:\Deployment\Agent.exe",
FileName= "PsExec.exe",//这里要指定exe的具体路径
WindowStyle= ProcessWindowStyle.Hidden
};
var process = Process.Start(info);
process.WaitForExit();
process.ExitCode;
Azure:
ServicePointManager.ServerCertificateValidationCallback= ValidateCertificate;(获取或设置用于验证服务器证书的回调。具体如何使用可以在网上找下)
varconnectionString = "DefaultEndpointsProtocol=https;AccountName=blob;AccountKey=8kR6NNeWdgp0oKtYMLN1K+nQFCR+bpF67dlNtInz9QePAOY9nOuCABSS*********==;EndpointSuffix=core.Chinacloudapi.cn";
var account = CloudStorageAccount.Parse(connectionString);
var client =account.CreateCloudBlobClient();
var container =client.GetContainerReference(ConfigurationSettings.AppSettings["MicContainerReference"]);
var blob =container.GetBlockBlobReference(ConfigurationSettings.AppSettings["MicBlockBlobReference"]);
// 上传压缩文件
using (varstream =File.OpenRead(appZipPath))//zip))
{
blob.UploadFromStream(stream);
}
ServerManager:
var manager = newServerManager();
var pools = manager.ApplicationPools;
var pool = pools[name];
if (pool == null)
{
// 创建应用程序池
pool = pools.Add(name);
}
// 设置应用程序池
pool.AutoStart =true;
pool.Cpu.Limit =80;
pool.ManagedPipelineMode= ManagedPipelineMode.Integrated;
pool.ManagedRuntimeVersion= "v4.0";
pool.ProcessModel.IdentityType= ProcessModelIdentityType.SpecificUser;
pool.ProcessModel.IdleTimeout= TimeSpan.Zero;
pool.ProcessModel.Password= password;
pool.ProcessModel.UserName= userName;
pool.Recycling.PeriodicRestart.Memory= 0;
pool.Recycling.PeriodicRestart.PrivateMemory= 0;
pool.Recycling.PeriodicRestart.Schedule.Clear();
pool.Recycling.PeriodicRestart.Schedule.Add(TimeSpan.Parse("04:00:00"));
pool.Recycling.PeriodicRestart.Time= TimeSpan.Zero;
//pool.StartMode = StartMode.AlwaysRunning;
// 获取网站
var sites = manager.Sites;
var site = sites[name];
if (site == null)
{
//创建网站
site= sites.Add(name, target, port);
}
// 设置网站
site.ApplicationDefaults.ApplicationPoolName= name;
site.Bindings.Clear();
site.Bindings.Add("*:" + port + ":", "http");
代码调试通过后,开始用Jenkins构建,出现net链接失败问题,在代码调试是没问题的。
解决方法是修改Jenkins服务属性登录账户和密码,然后重启服务。
服务器上的代理程序一直下载不了微软云上的文件,需要联系网络的同事配置服务器可访问微软云。
图片复制太复制了,就没有一个一个上传。图片复制太复制了,就没有一个一个上传。
http://note.youdao.com/noteshare?id=3cbe8b3e0e5451dc0f117366b6a733af&sub=7C07125D1D99434C95AFCF929CC42923