コード例 #1
0
        public bool TryInitBuild(RequestContext context, Build build, string[] buildArgs)
        {
            if (_process != null)
            {
                RaiseCommonError("InitBuild: server is busy!", true);
                return(false);
            }
            for (var i = 0; i < buildArgs.Length; i++)
            {
                var curArg   = buildArgs[i];
                var argName  = build.Args.ElementAtOrDefault(i);
                var argCheck = build.Checks.ElementAtOrDefault(i);
                if (!IsValidBuildArg(curArg, argCheck))
                {
                    RaiseCommonError($"InitBuild: argument '{argName}' is invalid: '{curArg}' don't maches by '{argCheck}'!", true);
                    return(false);
                }
            }
            _logger.LogDebug($"InitBuild: \"{build.Name}\"");
            _build   = build;
            _process = new BuildProcess(_loggerFactory, build);
            var convertedLogFile = ConvertArgValue(Project, _build, null, build.LogFile);

            LogFileChanged?.Invoke(convertedLogFile);
            OnInitBuild?.Invoke(context, _process);
            return(true);
        }
コード例 #2
0
        void ProcessBuild()
        {
            _logger.LogDebug("ProcessBuild");
            var nodes = _build.Nodes;

            _process.StartBuild(_curTime);
            if (nodes.Count == 0)
            {
                _logger.LogError("ProcessBuild: No build nodes!");
                _process.Abort(_curTime);
            }
            var tasks = InitTasks(nodes);

            foreach (var task in tasks)
            {
                _logger.LogDebug($"ProcessBuild: task: {tasks.IndexOf(task)}/{tasks.Count}");
                task.Start();
                task.Wait();
                var result = task.Result;
                if (!result)
                {
                    _logger.LogDebug($"ProcessBuild: failed command!");
                    _process.Abort(_curTime);
                }
                if (_process.IsAborted)
                {
                    _logger.LogDebug($"ProcessBuild: aborted!");
                    break;
                }
            }
            LogFileChanged?.Invoke(null);
            _buildArgs  = null;
            _build      = null;
            _thread     = null;
            _process    = null;
            _taskStates = new ConcurrentDictionary <string, string>();
            _logger.LogDebug("ProcessBuild: cleared");
        }