コード例 #1
0
        public async Task <Build> PushAsync(Guid projectId, BuildTaskDto taskDto)
        {
            logger.LogInformation("Pushing task into queue");
            var build = await CreateBuildAsync(taskDto);

            var buildSteps = await buildStepRepository.GetAllFromBuildConfigAsync(taskDto.BuildConfig.Id);

            var commands = buildSteps.Select(bs => new BuildCommand
            {
                Command   = bs.BuildStepScript.Command,
                Arguments = bs.BuildStepScript.Arguments
            }).ToList();
            var project = await projectRepository.FindByIdAsync(projectId);

            var buildTask = new BuildTask
            {
                Id         = Guid.NewGuid(),
                Commands   = commands,
                BuildId    = build.Id,
                GitToken   = project.GitToken,
                ProjectUrl = project.ProjectUri.ToString()
            };

            queue.Enqueue(buildTask, Priority.Normal);
            await ChangeBuildStatus(build.Id, BuildStatus.WaitingToStart, null);

            return(build);
        }
コード例 #2
0
        private async Task <Build> CreateBuildAsync(BuildTaskDto buildTaskDto)
        {
            var dbBuild = new global::Repositories.Database.Models.Build
            {
                BuildConfigId   = buildTaskDto.BuildConfig.Id,
                BuildStatus     = BuildStatus.WaitingToGetPlaceInQueue,
                FinishTime      = null,
                Logs            = null,
                StartedByUserId = buildTaskDto.StartedByUserId,
                StartTime       = DateTime.Now
            };

            var resultBuildDb = await buildRepository.AddAsync(dbBuild);

            return(new Build
            {
                Id = resultBuildDb.Id,
                BuildConfigId = resultBuildDb.BuildConfigId,
                BuildStatus = resultBuildDb.BuildStatus,
                FinishTime = resultBuildDb.FinishTime,
                Logs = resultBuildDb.Logs,
                StartedByUserId = resultBuildDb.StartedByUserId,
                StartTime = DateTime.Now
            });
        }
コード例 #3
0
        public async Task <HttpOperationResult <Build> > PushTaskAsync(BuildTaskDto task)
        {
            var request = new HttpRequestMessage(HttpMethod.Post, new Uri(new Uri(ApiUrl), "/buildTasks"));

            request.Headers.Accept.Clear();
            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            request.Headers.Add("Content-Type", "application/json");

            var response = await HttpClient.SendAsync(request);

            if ((int)response.StatusCode < 200 || (int)response.StatusCode > 299)
            {
                return(HttpOperationResult <Build> .Failed(HttpStatusCode.InternalServerError, "Something gone wrong. Check agent-manager's logs"));
            }

            var body = await response.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <HttpOperationResult <Build> >(body));
        }
コード例 #4
0
        public async Task <Build> RunAsync(Guid id, string userId)
        {
            var dbBuildConfig = await buildConfigRepository.FindByIdAsync(id);

            var buildConfig  = ModelsMapper.ConvertBuildConfigDbModelToServiceModel(dbBuildConfig);
            var buildTaskDto = new BuildTaskDto
            {
                BuildConfig     = buildConfig,
                StartedByUserId = userId
            };
            var pushTaskResult = await buildTaskProvider.PushTaskAsync(buildTaskDto);

            if (!pushTaskResult.IsSuccessful)
            {
                throw new Exception(pushTaskResult.Error);
            }
            var build = await buildRepository.FindByIdAsync(pushTaskResult.Value.Id);

            if (build == null)
            {
                throw new EntityNotFoundException(nameof(Build), pushTaskResult.Value.Id.ToString());
            }
            return(ModelsMapper.ConvertBuildDbModelToServiceModel(build));
        }
コード例 #5
0
        public async Task <HttpOperationResult <Build> > PushTaskAsync([FromBody] BuildTaskDto buildTaskDto)
        {
            var build = await buildTasksService.PushAsync(buildTaskDto.BuildConfig.ProjectId, buildTaskDto);

            return(HttpOperationResult <Build> .Ok(build));
        }