Exemple #1
0
        /// <summary>
        /// 根据Unit.config Copy文件
        /// </summary>
        private static void CopyFileByUnitConfig(LogEngin _logEngin, DeployTaskBean _deployBean, string _sourceCodeRootDir, string _projectTempDir)
        {
            _logEngin.Info("根据Unit.config Copy File");
            string _projectPath     = Path.Combine(Constants.CurrentConfigProjects, _deployBean.ProjectName);
            string _environmentPath = Path.Combine(_projectPath, _deployBean.Environment);

            if (!IOUtils.DirExists(_environmentPath))
            { //表示文件目录不存在 配置有问题
                throw new Exception(_deployBean.Environment + " 环境不存在,配置有问题");
            }
            //获取当前环境下面的所以单元项目路径
            ArrayList _unitDirs = FileUtils.GetDirs(_environmentPath);

            foreach (DirectoryInfo _unitDir in _unitDirs)
            {
                string _unitTempDir = _projectTempDir + Path.DirectorySeparatorChar + _unitDir.Name;
                FileUtils.CreateDir(_unitTempDir);

                string _unitConfigFile    = _unitDir.FullName + Path.DirectorySeparatorChar + "Unit.config";
                string _unitConfigContent = IOUtils.GetUTF8String(_unitConfigFile);

                try
                {
                    JObject _unitConfigObj = JObject.Parse(_unitConfigContent);
                    var     _appFiles      = _unitConfigObj.GetValue("AppFiles");
                    string  _upgradeType   = _deployBean.UpgradeType;
                    if (_appFiles != null && ("all".Equals(_upgradeType) || "app".Equals(_upgradeType)))
                    {
                        JArray _copyFiles = _appFiles as JArray;
                        foreach (JObject _copyFile in _copyFiles)
                        {
                            string _sourcePathStr = _copyFile.GetValue("sourcePath").ToString();
                            string _targetPathStr = _copyFile.GetValue("targetPath").ToString();

                            //string _ignore = _appFileObj.GetValue("ignore").ToString();
                            string _sourcePath = Path.Combine(_sourceCodeRootDir, _unitDir.Name, _sourcePathStr);
                            string _targetPath = _unitTempDir;
                            if (_targetPathStr != null && !"".Equals(_targetPathStr))
                            {
                                _targetPath = _unitTempDir + Path.DirectorySeparatorChar + _targetPathStr;
                            }
                            //copy到temp/projectid/unit/目录下面
                            FileUtils.CopyDirOrFile(_sourcePath, _targetPath);
                            _logEngin.Info("     Unit = " + _unitDir.Name + " 从  " + _sourcePath + " Copy 到" + _targetPath);
                        }
                    }

                    var _configFiles = _unitConfigObj.GetValue("ConfigFiles");
                    if (_configFiles != null && ("all".Equals(_upgradeType) || "config".Equals(_upgradeType)))
                    {
                        JArray _copyFiles = _configFiles as JArray;
                        foreach (JObject _copyFile in _copyFiles)
                        {
                            string _sourcePathStr = _copyFile.GetValue("sourcePath").ToString();
                            string _targetPathStr = _copyFile.GetValue("targetPath").ToString();

                            //string _ignore = _appFileObj.GetValue("ignore").ToString();
                            string _sourcePath = Path.Combine(_unitDir.FullName, _sourcePathStr);
                            string _targetPath = _unitTempDir;
                            if (_targetPathStr != null && !"".Equals(_targetPathStr))
                            {
                                _targetPath = Path.Combine(_unitTempDir, _targetPathStr);
                            }
                            //copy到temp/projectid/unit/目录下面
                            FileUtils.CopyDirOrFile(_sourcePath, _targetPath);
                            _logEngin.Info("     Unit = " + _unitDir.Name + " 从  " + _sourcePath + " Copy 到" + _targetPath);
                        }
                    }
                }
                catch (Exception _ex)
                {
                    throw new Exception("Unit.config 配置内容有误! \n" + _ex);
                }
            }
        }
Exemple #2
0
        static void DeployThreadChild()
        {
            while (true)
            {
                //请求http获取部署任务
                long _cDate = DateTime.Now.ToFileTime();
                Dictionary <string, object> _dictData = new Dictionary <string, object>();
                _dictData.Add("TimeStamp", _cDate);
                var    _sign        = SignData.Md5SignDict(_configBean.SecurityKey, _dictData);
                string _postDataStr = "TimeStamp=" + _cDate + "&Sign=" + _sign;
                string _result      = HttpUtils.HttpGet(Constants.GET_DEPLOY_TASK, _postDataStr);

                //如果取到任务
                if (_result != null && _result.Length > 0 && !"null".Equals(_result))
                {
                    //如果取到任务
                    DeployTaskBean _deployBean = new DeployTaskBean();
                    try
                    {
                        JObject _buildConfigObj = JObject.Parse(_result);
                        _deployBean.Id          = _buildConfigObj.GetValue("Id").ToString();
                        _deployBean.TaskId      = _buildConfigObj.GetValue("BuildId").ToString();
                        _deployBean.ProjectName = _buildConfigObj.GetValue("ProjectName").ToString();
                        _deployBean.BranchName  = _buildConfigObj.GetValue("BranchName").ToString();
                        _deployBean.Environment = _buildConfigObj.GetValue("Environment").ToString();
                        _deployBean.UpgradeType = _buildConfigObj.GetValue("UpgradeType").ToString();;
                        _deployBean.AutoUpgrade = Boolean.Parse(_buildConfigObj.GetValue("AutoUpgrade").ToString());
                    }
                    catch (Exception ex)
                    {
                        LogUtils.Error(null, new Exception("解析部署任务数据请求失败 " + _result));
                        LogUtils.Error(null, ex);
                        throw;
                    }
                    LogEngin _logEngin = new LogEngin("部署", _deployBean.TaskId);

                    try
                    {
                        string _taskTempDir    = Path.Combine(Constants.Temp, _deployBean.TaskId);
                        string _projectTempDir = Path.Combine(_taskTempDir, _deployBean.ProjectName);

                        //E:\AutoBuildHome\SourceFile\myProjct\project1\master
                        ////////////////////根据UnitConfig Copy 文件
                        if (_sourceCodeRootDirs.ContainsKey(_deployBean.TaskId))
                        {
                            CopyFileByUnitConfig(_logEngin, _deployBean, _sourceCodeRootDirs[_deployBean.TaskId].ToString(), _projectTempDir);
                            string _zipSourceDir = _projectTempDir;

                            ArrayList _modifyFiles = new ArrayList();
                            ///////////////////判断是否增量升级
                            if (_deployBean.AutoUpgrade)
                            {
                                //MD5比较文件是否修改
                                string _sourcePath = Path.Combine(Constants.Temp, _deployBean.TaskId, _deployBean.ProjectName);
                                string _targetPath = Path.Combine(Constants.CurrentVersion, _deployBean.ProjectName);

                                ArrayList _files = new ArrayList();
                                FileUtils.GetFiles(new DirectoryInfo(_sourcePath), _files);
                                string _outTempDir = Path.Combine(_taskTempDir, "upgrade");
                                FileUtils.CreateDir(_outTempDir);

                                foreach (string _file in _files)
                                {
                                    string _oldFile = _file.Replace(_sourcePath, _targetPath);
                                    //文件存在就MD5比较
                                    if (IOUtils.FileExists(_oldFile))
                                    {
                                        string _newMD5 = MD5Utils.MD5File(_file);
                                        string _oldMD5 = MD5Utils.MD5File(_oldFile);
                                        if (!_newMD5.Equals(_oldMD5))
                                        {
                                            _logEngin.Info("不一样的文件:" + _file);
                                            _modifyFiles.Add(_file);
                                            string _outPath = _file.Replace(_taskTempDir, _outTempDir);
                                            FileUtils.CopyDirOrFile(_file, _outPath);
                                        }
                                    }
                                    else
                                    {
                                        _logEngin.Info("新增文件:" + _file);
                                        _modifyFiles.Add(_file);
                                        string _outPath = _file.Replace(_taskTempDir, _outTempDir);
                                        FileUtils.CopyDirOrFile(_file, _outPath);
                                    }
                                }

                                if (_modifyFiles.Count > 0)
                                {
                                    _zipSourceDir = Path.Combine(_outTempDir, _deployBean.ProjectName);
                                }
                                else
                                {
                                    _logEngin.Error(new Exception("选择增量升级但无文件改动,部署失败"));
                                }
                            }

                            if (!_deployBean.AutoUpgrade || _modifyFiles.Count > 0)
                            {
                                //压缩文件
                                string _buildZip = _deployBean.TaskId + ".zip";
                                _logEngin.Info("压缩文件 " + _buildZip);
                                string _zipPath = Path.Combine(Constants.Temp, _deployBean.TaskId, _buildZip);
                                ZipFile.CreateFromDirectory(_zipSourceDir, _zipPath, CompressionLevel.Fastest, true);
                                _logEngin.Info("     压缩 " + _projectTempDir + " 目录,生成" + _buildZip + " 文件");
                                _logEngin.Info("     上传 " + _buildZip + " 文件到七牛");

                                ////////////////////压缩build包,并上传到七牛云
                                _deployBean.DeployQiniuUrl = UploadZip(_logEngin, _deployBean.TaskId, _deployBean.ProjectName, _zipPath, _buildZip);
                            }

                            //删除临时目录
                            FileUtils.DeleteDir(Path.Combine(Constants.Temp, _deployBean.TaskId));
                        }
                        else
                        {
                            throw new Exception("deployed 失败: 不存在 " + _deployBean.TaskId + " build 任务!");
                        }
                    }
                    catch (Exception _ex)
                    {
                        ////////build失败
                        _logEngin.Error(_ex);
                        _logEngin.IsSuccess = false;
                    }

                    ////////////////文件上传成功,把文件上传路径传给服务器
                    _logEngin.Info("本地Deployed完成通知服务器");
                    /////
                    _logEngin.Info("组装资源文件完成,通知部署服务器去Qiniu下载资源文件");
                    Console.WriteLine("组装资源文件完成,通知部署服务器去Qiniu下载资源文件");

                    if (_logEngin.IsSuccess && _deployBean.DeployQiniuUrl != null && _deployBean.DeployQiniuUrl.Length > 0)
                    {
                        _sourceCodeRootDirs.Remove(_deployBean.TaskId);
                        Dispatcher(_logEngin, _deployBean.ProjectName, _deployBean.Environment, _deployBean.DeployQiniuUrl);
                    }

                    //上传日志文件
                    string _log     = _logEngin.ToHtml();
                    string _logPath = Path.Combine(Constants.Temp, _deployBean.TaskId + "_deploy.html");
                    IOUtils.WriteUTF8String(_logPath, _log);
                    string _logUrl = UploadLogFile(_logEngin, _logPath);

                    //请求http获取打包任务
                    _cDate = DateTime.Now.ToFileTime();
                    _dictData.Clear();

                    int _state = (_logEngin.IsSuccess ? 2 : 1);

                    _dictData.Add("TimeStamp", _cDate);
                    _dictData.Add("Id", _deployBean.Id);
                    _dictData.Add("State", _state);
                    _dictData.Add("Url", _deployBean.DeployQiniuUrl);
                    _dictData.Add("LogUrl", _logUrl);

                    _sign = SignData.Md5SignDict(_configBean.SecurityKey, _dictData);

                    JObject _postDataJson = new JObject();
                    _postDataJson.Add("Id", _deployBean.Id);
                    _postDataJson.Add("State", _state);
                    _postDataJson.Add("Url", _deployBean.DeployQiniuUrl);
                    _postDataJson.Add("LogUrl", _logUrl);
                    _postDataJson.Add("TimeStamp", _cDate);
                    _postDataJson.Add("Sign", _sign);

                    HttpUtils.HttpPut(Constants.GET_DEPLOY_TASK, _postDataJson.ToString());
                }
                else //没有取到任务,隔段时间再去取
                {
                    Thread.Sleep(_configBean.GetBuildTaskInterval * 1000);
                }
            }
        }