G.系列导航
设置项目部署流程
项目类型:选择Console,这个跟功能无关,只是做项目分类,后面会有后续功能
宿主:选择Console
部署方式:选择原始,目前部署Console只支持原始部署方式
宿主属性:格式以宿主属性前面的问号给的为准
控制负载均衡
保证你已经设置项目属性里面的负载均衡值,以及服务器的标识
增加了部署环境标签,可以查看与当前项目环境相关的服务器,然后对每台服务器进行设置权重。
跳转到持续集成控制台
当持续集成Build失败时,往往我们需要进到持续集成控制台查看Build信息,已便快速定位问题。
查看构建状态界面,增加控制台按钮,可以直接跳转到当前Job的控制台界面,目前只支持Jenkins。
小坑锦集
32位进程无法访问64位进程模块
public void Kill(string filePath) { var wmiQueryString = "SELECT ProcessId, ExecutablePath, CommandLine FROM Win32_Process"; using (var searcher = new ManagementObjectSearcher(wmiQueryString)) using (var results = searcher.Get()) { var query = from p in Process.GetProcesses() join mo in results.Cast<ManagementObject>() on p.Id equals (int)(uint)mo["ProcessId"] select new { Process = p, Path = (string)mo["ExecutablePath"], CommandLine = (string)mo["CommandLine"], }; foreach (var item in query) { if (filePath == item.Path) { item.Process.Kill(); item.Process.WaitForExit(); } } } }
通过System.Management命名空间下的 ManagementObjectSearcher 来获取应用程序路径,然后Kill。
这段代码源自部署Console时需要先kill process。不使用process name是因为我们的业务场景同一个程序会根据参数不同部署多个目录运行Job,如果按照process name就比较麻烦。按照目录则可以给每个目录设定为一个项目,根据项目的边界进行管理。
文件XX正由另一进程使用
这个异常出现在部署过程中,解压缩覆盖时。
由于覆盖前已经调用 Process Kill 来杀死进程,但实际并只是发了一个Kill的命令,而并没有等待真正Kill结束。所以在上面Kill的代码片段内,Kill后加了一个 WaitForExit 来等待进程结束。