Ejemplo n.º 1
0
        /// <summary>
        /// 持续集成入口
        /// </summary>
        static void Integration()
        {
            WorkPath = ConfigHelper.GetValue("WorkPath");

            var releaseService = new ReleaseService();
            var projService    = new ProjectService();

            var list = releaseService.GetReleaseListByStatus("发布中");//获取需要发布版本的请求

            //list.Clear();
            //list.Add(new CIRelease
            //{
            //    ID = "9a44c1d9-6c8a-4be9-b964-7e5978cad1b7",
            //    ProjectID = "bf5d0925-76d4-4936-927f-d22da9da30df",
            //    Type = "测试版本"
            //});//测试用

            foreach (var item in list)
            {
                var project = new CIProject();
                project = projService.GetById(item.ProjectID);
                var projectSvnUrl = string.Empty;
                if (item.Type == "测试版本")
                {
                    projectSvnUrl = project.ProjectSvnURL;
                }
                if (item.Type == "正式版本")
                {
                    projectSvnUrl = project.ProjectSvnURLRelease;
                }
                SlnName     = project.SlnName;     //从数据库读取解决方案名称
                PackagePath = project.PackagePath; //从数据库中读取打包路径名称

                //var path = project.ProjectSvnURL.Split('/');
                var path = projectSvnUrl.Split('/');
                BranchName = path[path.Length - 1];
                ProjCode   = path[path.Length - 2];

                item.BeginTime = DateTime.Now;

                Console.WriteLine(project.ProjectName + "代码获取中...");
                string svnlog    = "";
                long   reversion = -1;
                SVNUpdate(projectSvnUrl, out svnlog, out reversion); //svn代码获取
                item.Remark    = svnlog;                             //svn 日志
                item.Reversion = reversion;                          //版本号
                Console.WriteLine(item.Remark);
                Console.WriteLine("代码获取成功");

                Console.WriteLine(project.ProjectName + "代码编译打包中...");
                MSBuildAndCompress();//编译打包

                #region 发布记录更新
                var localpath = WorkPath + @"\" + ProjCode + @"\" + BranchName;//当前发布记录地址

                item.EndTime = DateTime.Now;

                //获取发布日志
                var    logpath = localpath + @"\log.log";
                string s       = "";

                // FileStream fs = new FileStream("f:\\aaa.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
                // StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);

                using (StreamReader sr = new StreamReader(logpath, System.Text.Encoding.Default))
                {
                    item.LogContent = sr.ReadToEnd();//发布日志
                }

                //判断发布状态逻辑
                if (item.LogContent.IndexOf("成功生成") > 0 || item.LogContent.IndexOf("Build succeeded") > 0)
                {
                    item.Status = "发布成功";

                    var              filename = "";
                    DirectoryInfo    dirInfo  = new DirectoryInfo(WorkPath + @"\" + ProjCode + @"\" + BranchName);
                    FileSystemInfo[] files    = dirInfo.GetFileSystemInfos();
                    for (int i = 0; i < files.Length; i++)
                    {
                        FileInfo file = files[i] as FileInfo;
                        if (file != null && file.Name.ToLower().LastIndexOf(".rar") > -1) //是文件
                        {
                            filename = file.Name;
                        }
                    }

                    //获取下载地址逻辑
                    item.VersionURL = "/" + ProjCode + "/" + BranchName + "/" + filename;//下载地址url
                }
                else
                {
                    item.Status = "发布失败";
                }
                releaseService.UpdatePro(item);
                #endregion
            }
        }