使用的工具及技術:
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