Ejemplo n.º 1
0
        public override HttpHandlerResult Post()
        {
            var qGitRefspec = GetQuery("refspec");

            HttpBuildStartRequest startInfo = null;

            if (HttpContext.Request.ContentLength64 > 0)
            {
                startInfo = JsonSettings.Serializer.Deserialize <HttpBuildStartRequest>(HttpContext.Request.InputStream);
            }

            if (startInfo == null)
            {
                return(Response.BadRequest().SetText("No json request was found!"));
            }

            var _gitRefspec = qGitRefspec ?? startInfo.GitRefspec;

            try {
                if (!PhotonServer.Instance.Projects.TryGet(startInfo.ProjectId, out var project))
                {
                    return(Response.BadRequest().SetText($"Project '{startInfo.ProjectId}' was not found!"));
                }

                var projectData = PhotonServer.Instance.ProjectData.GetOrCreate(project.Id);
                var buildNumber = projectData.StartNewBuild();

                var session = new ServerBuildSession {
                    Project          = project,
                    AssemblyFilename = project.AssemblyFile,
                    PreBuild         = project.PreBuild,
                    TaskName         = startInfo.TaskName,
                    GitRefspec       = _gitRefspec,
                    BuildNumber      = buildNumber,
                    Roles            = startInfo.Roles,
                };

                PhotonServer.Instance.Sessions.BeginSession(session);
                PhotonServer.Instance.Queue.Add(session);

                var response = new HttpBuildStartResponse {
                    SessionId = session.SessionId,
                };

                return(Response.Json(response));
            }
            catch (Exception error) {
                Log.Error($"Failed to run Build-Task '{startInfo.TaskName}' from Project '{startInfo.ProjectId}' @ '{_gitRefspec}'!", error);
                return(Response.Exception(error));
            }
        }
Ejemplo n.º 2
0
        private async Task <HttpBuildStartResponse> StartSession(PhotonServerDefinition server, HttpBuildStartRequest request)
        {
            HttpClientEx client        = null;
            MemoryStream requestStream = null;

            try {
                requestStream = new MemoryStream();
                JsonSettings.Serializer.Serialize(requestStream, request, true);

                var url = NetPath.Combine(server.Url, "api/build/start");

                client = HttpClientEx.Post(url, new {
                    refspec = GitRefspec,
                });

                requestStream.Seek(0, SeekOrigin.Begin);
                client.Body = requestStream;

                await client.Send();

                if (client.ResponseBase.StatusCode == HttpStatusCode.BadRequest)
                {
                    var text = await client.GetResponseTextAsync();

                    throw new ApplicationException($"Bad Build Request! {text}");
                }

                return(client.ParseJsonResponse <HttpBuildStartResponse>());
            }
            catch (HttpStatusCodeException error) {
                if (error.HttpCode == HttpStatusCode.NotFound)
                {
                    throw new ApplicationException($"Photon-Server instance '{server.Name}' not found!");
                }

                throw;
            }
            finally {
                requestStream?.Dispose();
                client?.Dispose();
            }
        }
Ejemplo n.º 3
0
        public override async Task <HttpHandlerResult> PostAsync(CancellationToken token)
        {
            var qProject    = GetQuery("project");
            var qGitRefspec = GetQuery("refspec");
            var qTaskName   = GetQuery("task");

            HttpBuildStartRequest startInfo = null;

            if (HttpContext.Request.ContentLength64 > 0)
            {
                startInfo = JsonSettings.Serializer.Deserialize <HttpBuildStartRequest>(HttpContext.Request.InputStream);
            }

            if (startInfo == null)
            {
                return(Response.BadRequest().SetText("No json request was found!"));
            }

            var _projectId  = qProject ?? startInfo.ProjectId;
            var _gitRefspec = qGitRefspec ?? startInfo.GitRefspec;
            var _taskName   = qTaskName ?? startInfo.TaskName;

            try {
                if (!PhotonServer.Instance.Projects.TryGet(_projectId, out var project))
                {
                    return(Response.BadRequest().SetText($"Project '{_projectId}' was not found!"));
                }

                var build = await project.StartNewBuild();

                build.TaskName         = _taskName;
                build.TaskRoles        = startInfo.Roles;
                build.PreBuildCommand  = project.Description.PreBuild;
                build.AssemblyFilename = project.Description.AssemblyFile;
                build.GitRefspec       = _gitRefspec;

                var session = new ServerBuildSession {
                    Project          = project.Description,
                    AssemblyFilename = project.Description.AssemblyFile,
                    PreBuild         = project.Description.PreBuild,
                    TaskName         = _taskName,
                    GitRefspec       = _gitRefspec,
                    Build            = build,
                    Roles            = startInfo.Roles,
                    Mode             = startInfo.Mode,
                };

                build.ServerSessionId = session.SessionId;

                if (!string.IsNullOrEmpty(startInfo.AssemblyFilename))
                {
                    session.AssemblyFilename = startInfo.AssemblyFilename;
                }

                if (!string.IsNullOrEmpty(startInfo.PreBuildCommand))
                {
                    session.PreBuild = startInfo.PreBuildCommand;
                }

                PhotonServer.Instance.Sessions.BeginSession(session);
                PhotonServer.Instance.Queue.Add(session);

                var response = new HttpBuildStartResponse {
                    SessionId   = session.SessionId,
                    BuildNumber = session.Build.Number,
                };

                return(Response.Json(response));
            }
            catch (Exception error) {
                Log.Error($"Failed to run Build-Task '{startInfo.TaskName}' from Project '{startInfo.ProjectId}' @ '{_gitRefspec}'!", error);
                return(Response.Exception(error));
            }
        }