protected async Task CreateBuildEngineBuildAsync(Product product)
        {
            await ResetPreviousBuildAsync(product);

            BuildResponse buildResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                buildResponse = BuildEngineApi.CreateBuild(product.WorkflowJobId);
            }
            if ((buildResponse != null) && (buildResponse.Id != 0))
            {
                product.WorkflowBuildId = buildResponse.Id;
                var productBuild = new ProductBuild
                {
                    ProductId = product.Id,
                    BuildId   = product.WorkflowBuildId
                };
                await ProductBuildRepository.CreateAsync(productBuild);

                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineBuildService>(service => service.CheckBuild(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create build failed");
            }
        }
        protected async Task CreateBuildEngineProjectAsync(Project project)
        {
            var buildEngineProject = new BuildEngineProject
            {
                UserId        = project.Owner.Email,
                GroupId       = project.Group.Abbreviation,
                AppId         = project.Type.Name,
                LanguageCode  = project.Language,
                PublishingKey = project.Owner.PublishingKey,
                ProjectName   = project.Name
            };
            ProjectResponse projectResponse = null;

            if (SetBuildEngineEndpoint(project.Organization))
            {
                projectResponse = BuildEngineApi.CreateProject(buildEngineProject);
            }
            if ((projectResponse != null) && (projectResponse.Id != 0))
            {
                // Set state to active?
                project.WorkflowProjectId = projectResponse.Id;
                await ProjectRepository.UpdateAsync(project);

                var monitorJob = Job.FromExpression <BuildEngineProjectService>(service => service.ManageProject(project.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(project.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create project failed");
            }
        }
Esempio n. 3
0
        protected async Task CreateBuildEngineReleaseAsync(Product product, string channel)
        {
            var release = new Release
            {
                Channel = channel
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }
        protected async Task CreateBuildEngineReleaseAsync(Product product, Dictionary <string, object> paramsDictionary, PerformContext context)
        {
            var channel     = GetChannel(paramsDictionary);
            var targets     = GetTargets(paramsDictionary, "google-play");
            var environment = GetEnvironment(paramsDictionary);

            environment["PRODUCT_ID"] = product.Id.ToString();
            environment["PROJECT_ID"] = product.ProjectId.ToString();
            var release = new Release
            {
                Channel     = channel,
                Targets     = targets,
                Environment = environment
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var build = await BuildRepository.Get().Where(b => b.BuildId == product.WorkflowBuildId).FirstOrDefaultAsync();

                if (build == null)
                {
                    throw new Exception($"Failed to find ProductBuild: {product.WorkflowBuildId}");
                }
                var publish = new ProductPublication
                {
                    ProductId      = product.Id,
                    ProductBuildId = build.Id,
                    ReleaseId      = releaseResponse.Id,
                    Channel        = channel
                };
                await PublicationRepository.CreateAsync(publish);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "releaseFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }
        protected async Task CreateBuildEngineBuildAsync(Product product, Dictionary <string, object> parmsDictionary, PerformContext context)
        {
            await ResetPreviousBuildAsync(product);

            BuildResponse buildResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                var targets     = GetTargets(parmsDictionary, "apk play-listing");
                var environment = GetEnvironment(parmsDictionary);
                environment["PRODUCT_ID"] = product.Id.ToString();
                environment["PROJECT_ID"] = product.ProjectId.ToString();
                var build = new Build
                {
                    Targets     = targets,
                    Environment = environment
                };
                buildResponse = BuildEngineApi.CreateBuild(product.WorkflowJobId, build);
            }
            if ((buildResponse != null) && (buildResponse.Id != 0))
            {
                product.WorkflowBuildId = buildResponse.Id;
                var productBuild = new ProductBuild
                {
                    ProductId = product.Id,
                    BuildId   = product.WorkflowBuildId
                };
                await ProductBuildRepository.CreateAsync(productBuild);

                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineBuildService>(service => service.CheckBuild(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "buildFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create build failed");
            }
        }
        protected async Task CreateBuildEngineProjectAsync(Project project, PerformContext context)
        {
            var buildEngineProject = new BuildEngineProject
            {
                UserId        = project.Owner.Email,
                GroupId       = project.Group.Abbreviation,
                AppId         = project.Type.Name,
                LanguageCode  = project.Language,
                PublishingKey = project.Owner.PublishingKey,
                ProjectName   = project.Name
            };
            ProjectResponse projectResponse = null;

            if (SetBuildEngineEndpoint(project.Organization))
            {
                projectResponse = BuildEngineApi.CreateProject(buildEngineProject);
            }
            if ((projectResponse != null) && (projectResponse.Id != 0))
            {
                // Set state to active?
                project.WorkflowProjectId = projectResponse.Id;
                await ProjectRepository.UpdateAsync(project);

                var monitorJob = Job.FromExpression <BuildEngineProjectService>(service => service.ManageProject(project.Id, null));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(project.Id), monitorJob, "* * * * *");
            }
            else
            {
                if (IsFinalRetry(context))
                {
                    var messageParms = new Dictionary <string, object>()
                    {
                        { "projectName", project.Name }
                    };
                    await SendNotificationSvc.SendNotificationToOrgAdminsAndOwnerAsync(project.Organization, project.Owner,
                                                                                       "projectFailedUnableToCreate",
                                                                                       messageParms);
                }
                // Throw Exception to force retry
                throw new Exception("Create project failed");
            }
        }
Esempio n. 7
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs, IHostingEnvironment env)
        {
            //if (env.IsDevelopment())
            //{
            //    app.UseDeveloperExceptionPage();
            //}
            //else
            //{
            //    app.UseExceptionHandler("/Error");
            //    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            //    app.UseHsts();
            //}

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();


            // 將console的結果呈現在dashboard
            app.UseHangfireDashboard();
            //backgroundJobs.Enqueue(() => Console.WriteLine("Hello world from Hangfire!"));

            //RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Minutely);
            //移除排程工作
            RecurringJob.RemoveIfExists("Console.Write");

            var manager = new RecurringJobManager();

            manager.AddOrUpdate("2", Job.FromExpression(() => ExecutePowershell()), Cron.Minutely());


            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
        protected async Task CreateBuildEngineReleaseAsync(Product product, string channel, PerformContext context)
        {
            var release = new Release
            {
                Channel = channel
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "releaseFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }