public async Task Handle(ProjectEnvironmentActivatedEvent @event) { ReadReleaseDefinitionOptions readReleaseDefinitionOptions = new ReadReleaseDefinitionOptions(); readReleaseDefinitionOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; readReleaseDefinitionOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; readReleaseDefinitionOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; readReleaseDefinitionOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; readReleaseDefinitionOptions.OrganizationName = @event.OrganizationName; readReleaseDefinitionOptions.ProjectName = @event.ProjectName; readReleaseDefinitionOptions.ReleaseStageId = @event.ReleseStageId; var releaseDefinition = await _pipelineSpaceManagerService.GetReleaseDefinition(readReleaseDefinitionOptions); var productionEnvironment = releaseDefinition.Environments.FirstOrDefault(x => x.Name.Equals(DomainConstants.Environments.Production)); var lastAvailableEnvironment = releaseDefinition.Environments.Where(x => !x.Name.Equals(DomainConstants.Environments.Production)).OrderByDescending(x => x.Id).First(); var existingEnvironment = releaseDefinition.Environments.FirstOrDefault(x => x.Name.Equals(@event.EnvironmentName, StringComparison.InvariantCultureIgnoreCase)); if (existingEnvironment != null) { /*Environment Variables*/ var baseEnvironmentVariables = ((JObject)existingEnvironment.Variables); var propertyEnvironmentEnable = ((JObject)baseEnvironmentVariables).GetValue("PS_ENVIRONMENT_ENABLE"); if (propertyEnvironmentEnable != null) { propertyEnvironmentEnable["value"] = "True"; } } releaseDefinition.PipelineProcess = new CMSVSTSReleaseDefinitionPipelineProcessCreateModel() { Type = "designer" }; releaseDefinition.Properties = new CMSVSTSReleaseDefinitionPropertiesCreateModel() { DefinitionCreationSource = new CMSVSTSReleaseDefinitionPropertiesItemCreateModel() { Type = "System.String", Value = "ReleaseNew" } }; UpdateReleaseDefinitionOptions updateReleaseDefinitionOptions = new UpdateReleaseDefinitionOptions(); updateReleaseDefinitionOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; updateReleaseDefinitionOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; updateReleaseDefinitionOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; updateReleaseDefinitionOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; updateReleaseDefinitionOptions.OrganizationName = @event.OrganizationName; updateReleaseDefinitionOptions.ProjectName = @event.ProjectName; updateReleaseDefinitionOptions.Model = releaseDefinition; await _pipelineSpaceManagerService.UpdateReleaseDefinition(updateReleaseDefinitionOptions); }
public async Task Handle(ProjectEnvironmentCreatedEvent @event) { ReadReleaseDefinitionOptions readReleaseDefinitionOptions = new ReadReleaseDefinitionOptions(); readReleaseDefinitionOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; readReleaseDefinitionOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; readReleaseDefinitionOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; readReleaseDefinitionOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; readReleaseDefinitionOptions.OrganizationName = @event.OrganizationName; readReleaseDefinitionOptions.ProjectName = @event.ProjectName; readReleaseDefinitionOptions.ReleaseStageId = @event.ReleseStageId; var releaseDefinition = await _pipelineSpaceManagerService.GetReleaseDefinition(readReleaseDefinitionOptions); var developmentEnvironment = releaseDefinition.Environments.FirstOrDefault(x => x.Name.Equals(DomainConstants.Environments.Development)); var productionEnvironment = releaseDefinition.Environments.FirstOrDefault(x => x.Name.Equals(DomainConstants.Environments.Production)); var lastAvailableEnvironment = releaseDefinition.Environments.Where(x => !x.Name.Equals(DomainConstants.Environments.Production)).OrderByDescending(x => x.Id).First(); CMSVSTSReleaseDefinitionEnvironmentCreateModel newEnvironment = null; var environments = @event.Environments.OrderBy(x => x.Rank); foreach (var environment in environments) { var existingEnvironment = releaseDefinition.Environments.FirstOrDefault(x => x.Name.Equals(environment.Name, StringComparison.InvariantCultureIgnoreCase)); if (existingEnvironment == null) { newEnvironment = lastAvailableEnvironment.DeepClone(); newEnvironment.Id = lastAvailableEnvironment.Id > 0 ? -1 : (lastAvailableEnvironment.Id - 1); newEnvironment.Name = environment.Name; newEnvironment.Rank = environment.Rank; newEnvironment.Owner = lastAvailableEnvironment.Owner; newEnvironment.Conditions = new List <CMSVSTSReleaseDefinitionEnvironmentConditionCreateModel>() { new CMSVSTSReleaseDefinitionEnvironmentConditionCreateModel() { ConditionType = "2", EnvironmentId = lastAvailableEnvironment.Id, Name = lastAvailableEnvironment.Name, Value = "4" } }; //Change Variables Values Dictionary <string, string> environmentVariableValues = new Dictionary <string, string>(); environmentVariableValues.Add("ASPNETCORE_ENVIRONMENT", environment.Name.ToLower()); environmentVariableValues.Add("PS_ENVIRONMENT_ENABLE", "True"); foreach (var item in environment.Variables) { environmentVariableValues.Add(item.Name, item.Value); } var newEnvironmentVariables = ((JObject)newEnvironment.Variables).DeepClone(); foreach (var item in environmentVariableValues) { var property = ((JObject)newEnvironmentVariables).GetValue(item.Key); if (property != null) { property["value"] = item.Value; } else { var newEnvironmentVariablesObj = ((JObject)newEnvironmentVariables); dynamic jsonObject = new JObject(); jsonObject.value = item.Value; newEnvironmentVariablesObj.Add(item.Key, jsonObject); } } newEnvironment.Variables = newEnvironmentVariables; newEnvironment.DeployPhases[0].DeploymentInput.Condition = $"and(not(contains(variables['Release.ReleaseDescription'], 'PS_SKIP_ENVIRONMENT_{environment.Name}')), eq(variables['PS_ENVIRONMENT_ENABLE'], 'True'))"; if (environment.RequiredApproval) { newEnvironment.PreDeployApprovals = new CMSVSTSReleaseDefinitionEnvironmentDeployAprovalCreateModel() { ApprovalOptions = new CMSVSTSReleaseDefinitionEnvironmentDeployAprovalOptionCreateModel() { AutoTriggeredAndPreviousEnvironmentApprovedCanBeSkipped = false, EnforceIdentityRevalidation = false, ExecutionOrder = "1", releaseCreatorCanBeApprover = true, TimeoutInMinutes = 0 }, Approvals = new List <CMSVSTSReleaseDefinitionEnvironmentDeployAprovalItemCreateModel>() { new CMSVSTSReleaseDefinitionEnvironmentDeployAprovalItemCreateModel() { IsAutomated = false, IsNotificationOn = false, Rank = 1, Approver = lastAvailableEnvironment.Owner } } }; } releaseDefinition.Environments.Add(newEnvironment); lastAvailableEnvironment = newEnvironment; } else { //Change Variables Values Dictionary <string, string> environmentVariableValues = new Dictionary <string, string>(); environmentVariableValues.Add("ASPNETCORE_ENVIRONMENT", environment.Name.ToLower()); environmentVariableValues.Add("PS_ENVIRONMENT_ENABLE", "True"); foreach (var item in environment.Variables) { environmentVariableValues.Add(item.Name, item.Value); } var environmentVariables = ((JObject)existingEnvironment.Variables).DeepClone(); foreach (var item in environmentVariableValues) { var property = ((JObject)environmentVariables).GetValue(item.Key); if (property != null) { property["value"] = item.Value; } else { var newEnvironmentVariablesObj = ((JObject)environmentVariables); dynamic jsonObject = new JObject(); jsonObject.value = item.Value; newEnvironmentVariablesObj.Add(item.Key, jsonObject); } } if (!existingEnvironment.Name.Equals(developmentEnvironment.Name, StringComparison.InvariantCultureIgnoreCase)) { existingEnvironment.Conditions = new List <CMSVSTSReleaseDefinitionEnvironmentConditionCreateModel>() { new CMSVSTSReleaseDefinitionEnvironmentConditionCreateModel() { ConditionType = "2", EnvironmentId = lastAvailableEnvironment.Id, Name = lastAvailableEnvironment.Name, Value = "4" } }; } existingEnvironment.Rank = environment.Rank; existingEnvironment.Variables = environmentVariables; existingEnvironment.DeployPhases[0].DeploymentInput.Condition = $"and(not(contains(variables['Release.ReleaseDescription'], 'PS_SKIP_ENVIRONMENT_{environment.Name}')), eq(variables['PS_ENVIRONMENT_ENABLE'], 'True'))"; lastAvailableEnvironment = existingEnvironment; } } releaseDefinition.PipelineProcess = new CMSVSTSReleaseDefinitionPipelineProcessCreateModel() { Type = "designer" }; releaseDefinition.Properties = new CMSVSTSReleaseDefinitionPropertiesCreateModel() { DefinitionCreationSource = new CMSVSTSReleaseDefinitionPropertiesItemCreateModel() { Type = "System.String", Value = "ReleaseNew" } }; UpdateReleaseDefinitionOptions updateReleaseDefinitionOptions = new UpdateReleaseDefinitionOptions(); updateReleaseDefinitionOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; updateReleaseDefinitionOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; updateReleaseDefinitionOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; updateReleaseDefinitionOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; updateReleaseDefinitionOptions.OrganizationName = @event.OrganizationName; updateReleaseDefinitionOptions.ProjectName = @event.ProjectName; updateReleaseDefinitionOptions.Model = releaseDefinition; await _pipelineSpaceManagerService.UpdateReleaseDefinition(updateReleaseDefinitionOptions); /*AutoProvision*/ if (@event.EnvironmentAutoProvision) { //check the last success version deployed in the previous environment var previousEnvironment = @event.Environments.First(x => x.Rank == @event.EnvironmentRank - 1); if (!string.IsNullOrEmpty(previousEnvironment.LastSuccessVersionId)) { var environmentsToBeSkippedList = @event.Environments.Where(x => x.Rank < @event.EnvironmentRank); var descriptionsToBeSkipped = $"Release created from PipelineSpace. Detail: {string.Join(", ", environmentsToBeSkippedList.Select(x => $"PS_SKIP_ENVIRONMENT_{x.Name}"))}"; QueueReleaseOptions queueReleaseOptions = new QueueReleaseOptions(); queueReleaseOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; queueReleaseOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; queueReleaseOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; queueReleaseOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; queueReleaseOptions.ReleaseDefinitionId = @event.ReleseStageId; queueReleaseOptions.Alias = @event.ServiceName; queueReleaseOptions.VersionId = int.Parse(previousEnvironment.LastSuccessVersionId); queueReleaseOptions.VersionName = previousEnvironment.LastSuccessVersionName; queueReleaseOptions.Description = descriptionsToBeSkipped; await _pipelineSpaceManagerService.QueueRelease(queueReleaseOptions); } } }
public async Task Handle(ProjectServiceImportedEvent @event) { try { this.userId = @event.UserId; /* QUEUE - POOL ####################################################################################################################################################*/ GetQueueResult queue = null; await ExecuteProjectServiceActivity(@event.OrganizationId, @event.ProjectId, @event.ServiceId, nameof(DomainConstants.Activities.PSPRRQ), async() => { GetQueueOptions getQueueOptions = new GetQueueOptions(); getQueueOptions.CMSType = @event.CMSType; getQueueOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; getQueueOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; getQueueOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; getQueueOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalName : @event.ProjectVSTSFakeName; getQueueOptions.ProjectName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; getQueueOptions.AgentPoolId = @event.AgentPoolId; queue = await _pipelineSpaceManagerService.GetQueue(getQueueOptions); }); /* REPOSITORY ##############################################################################################################################################*/ string releaseDefinition = string.Empty; await ExecuteProjectServiceActivity(@event.OrganizationId, @event.ProjectId, @event.ServiceId, nameof(DomainConstants.Activities.PSCRRP), async() => { CreateRepositoryOptions createRepositoryOptions = new CreateRepositoryOptions(); createRepositoryOptions.OrganizationName = @event.OrganizationName; createRepositoryOptions.ProjectName = @event.ProjectName; createRepositoryOptions.ServiceName = @event.ServiceName; createRepositoryOptions.VSTSAccessId = _vstsOptions.Value.AccessId; createRepositoryOptions.VSTSAccessSecret = _vstsOptions.Value.AccessSecret; createRepositoryOptions.VSTSRepositoryTemplateUrl = @event.ServiceTemplateUrl; createRepositoryOptions.VSTSRepositoryTemplatePath = @event.ServiceTemplatePath; createRepositoryOptions.GitProviderType = @event.CMSType; createRepositoryOptions.GitProviderAccessId = @event.CMSAccessId; createRepositoryOptions.GitProviderAccessSecret = @event.CMSAccessSecret; createRepositoryOptions.GitProviderAccessToken = @event.CMSAccessToken; createRepositoryOptions.GitProviderRepositoryUrl = @event.ServiceExternalUrl; createRepositoryOptions.Branch = @event.BranchName; createRepositoryOptions.TemplateAccess = @event.TemplateAccess; createRepositoryOptions.NeedCredentials = @event.NeedCredentials; createRepositoryOptions.RepositoryCMSType = @event.RepositoryCMSType; createRepositoryOptions.RepositoryAccessId = @event.RepositoryAccessId; createRepositoryOptions.RepositoryAccessSecret = @event.RepositoryAccessSecret; createRepositoryOptions.RepositoryAccessToken = @event.RepositoryAccessToken; releaseDefinition = await _pipelineSpaceManagerService.GetReleaseDefinition(createRepositoryOptions, @event.BuildDefinitionYML); }); /* COMMIT-STAGE ##############################################################################################################################################*/ CreateBuildDefinitionOptions createBuildDefinitionOptions = null; int commitStageId = 0; Guid?commitServiceHookId = null; Guid?codeServiceHookId = null; await ExecuteProjectServiceActivity(@event.OrganizationId, @event.ProjectId, @event.ServiceId, nameof(DomainConstants.Activities.PSCRBD), async() => { createBuildDefinitionOptions = new CreateBuildDefinitionOptions(); createBuildDefinitionOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; createBuildDefinitionOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; createBuildDefinitionOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; createBuildDefinitionOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalName : @event.ProjectVSTSFakeName; createBuildDefinitionOptions.ProjectName = @event.ProjectName; createBuildDefinitionOptions.ServiceName = @event.ServiceName; createBuildDefinitionOptions.CommitStageName = @event.ServiceName; createBuildDefinitionOptions.GitProviderType = @event.CMSType; createBuildDefinitionOptions.GitProviderAccountId = @event.CMSAccountId; createBuildDefinitionOptions.GitProviderAccountName = @event.CMSAccountName; createBuildDefinitionOptions.GitProviderAccessId = @event.CMSAccessId; createBuildDefinitionOptions.GitProviderAccessSecret = @event.CMSAccessSecret; createBuildDefinitionOptions.GitProviderAccessToken = @event.CMSAccessToken; createBuildDefinitionOptions.GitProviderRepositoryId = @event.ServiceExternalId; createBuildDefinitionOptions.GitProviderRepositoryUrl = @event.ServiceExternalUrl; createBuildDefinitionOptions.GitProviderRepositoryBranch = @event.BranchName; createBuildDefinitionOptions.ProjectExternalGitEndpoint = @event.ProjectExternalGitEndpoint; createBuildDefinitionOptions.QueueId = queue.QueueId; createBuildDefinitionOptions.QueueName = queue.QueueName; createBuildDefinitionOptions.PoolId = queue.PoolId; createBuildDefinitionOptions.PoolName = queue.PoolName; createBuildDefinitionOptions.YamlFilename = ".pipelinespace/build.definition.yml"; commitStageId = await _pipelineSpaceManagerService.CreateBuildDefinition(createBuildDefinitionOptions); /* SERVICE-HOOK BUILD ##############################################################################################################################################*/ if (@event.CMSType == ConfigurationManagementService.VSTS) { CreateServiceHookOptions createServiceHookCodeOptions = new CreateServiceHookOptions(); createServiceHookCodeOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; createServiceHookCodeOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; createServiceHookCodeOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; createServiceHookCodeOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalName : @event.ProjectVSTSFakeName; createServiceHookCodeOptions.OrganizationId = @event.OrganizationId; createServiceHookCodeOptions.ProjectId = @event.ProjectId; createServiceHookCodeOptions.ServiceId = @event.ServiceId; createServiceHookCodeOptions.ProjectExternalId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalId : @event.ProjectVSTSFakeId; createServiceHookCodeOptions.EventType = "code"; createServiceHookCodeOptions.Definition = createBuildDefinitionOptions.CommitStageName; createServiceHookCodeOptions.Url = $"{_applicationOptions.Value.Url}/publicapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}/services/{@event.ServiceId}/events"; createServiceHookCodeOptions.Repository = @event.ServiceExternalId; createServiceHookCodeOptions.Branch = @event.BranchName; codeServiceHookId = await _pipelineSpaceManagerService.CreateServiceHook(createServiceHookCodeOptions); } CreateServiceHookOptions createServiceHookBuildOptions = new CreateServiceHookOptions(); createServiceHookBuildOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; createServiceHookBuildOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; createServiceHookBuildOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; createServiceHookBuildOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; createServiceHookBuildOptions.OrganizationId = @event.OrganizationId; createServiceHookBuildOptions.ProjectId = @event.ProjectId; createServiceHookBuildOptions.ServiceId = @event.ServiceId; createServiceHookBuildOptions.ProjectExternalId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalId : @event.ProjectVSTSFakeId; createServiceHookBuildOptions.EventType = "build"; createServiceHookBuildOptions.Definition = createBuildDefinitionOptions.CommitStageName; createServiceHookBuildOptions.Url = $"{_applicationOptions.Value.Url}/publicapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}/services/{@event.ServiceId}/events"; commitServiceHookId = await _pipelineSpaceManagerService.CreateServiceHook(createServiceHookBuildOptions); }); /* QUEUE - BUILD ########################################################`######################################################################################*/ await ExecuteProjectServiceActivity(@event.OrganizationId, @event.ProjectId, @event.ServiceId, nameof(DomainConstants.Activities.PSQUDB), async() => { QueueBuildOptions queueBuildOptions = new QueueBuildOptions(); queueBuildOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; queueBuildOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; queueBuildOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; queueBuildOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalName : @event.ProjectVSTSFakeName; queueBuildOptions.ProjectName = @event.ProjectExternalName; queueBuildOptions.ProjectExternalId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectExternalId : @event.ProjectVSTSFakeId; queueBuildOptions.QueueId = queue.QueueId; queueBuildOptions.BuildDefinitionId = commitStageId; queueBuildOptions.SourceBranch = @event.BranchName; await _pipelineSpaceManagerService.QueueBuild(queueBuildOptions); string eventUrl = $"{_applicationOptions.Value.Url}/publicapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}/services/{@event.ServiceId}/events"; await _httpClientWrapperService.PostAsync(eventUrl, new { SubscriptionId = Guid.NewGuid(), NotificationId = 1, Id = string.Empty, EventType = "git.push", PublisherId = "ps", Message = new { Text = "PipelineSpace initial build" }, DetailedMessage = new { }, Resource = new { }, Status = "Queued", Date = DateTime.UtcNow }, InternalAuthCredentials); }); /* ACTIVATE SERVICE ##############################################################################################################################################*/ await ExecuteProjectServiceActivity(@event.OrganizationId, @event.ProjectId, @event.ServiceId, nameof(DomainConstants.Activities.PSACBA), async() => { string projectServicePatchUrl = $"{_applicationOptions.Value.Url}/internalapi/organizations/{@event.OrganizationId}/projects/{@event.ProjectId}/services/{@event.ServiceId}"; var projectServicePatchResponse = await _httpClientWrapperService.PatchAsync(projectServicePatchUrl, new { CommitStageId = commitStageId, //ReleaseStageId = releaseStageId, CommitServiceHookId = commitServiceHookId, //ReleaseServiceHookId = releaseServiceHookId, CodeServiceHookId = codeServiceHookId, //ReleaseStartedServiceHookId = releaseStartedServiceHookId, //ReleasePendingApprovalServiceHookId = releasePendingApprovalServiceHookId, //ReleaseCompletedApprovalServiceHookId = releaseCompletedApprovalServiceHookId, PipelineStatus = PipelineStatus.Building }, InternalAuthCredentials); projectServicePatchResponse.EnsureSuccessStatusCode(); }); } catch (Exception ex) { } }
public async Task Handle(ProjectEnvironmentDeletedEvent @event) { /*Delete Infrastructure*/ CPSAuthModel authModel = new CPSAuthModel(); authModel.AccessId = @event.CPSAccessId; authModel.AccessName = @event.CPSAccessName; authModel.AccessSecret = @event.CPSAccessSecret; authModel.AccessRegion = @event.CPSAccessRegion; authModel.AccessAppId = @event.CPSAccessAppId; authModel.AccessAppSecret = @event.CPSAccessAppSecret; authModel.AccessDirectory = @event.CPSAccessDirectory; string cloudServiceName = $"{@event.OrganizationName}{@event.ProjectName}{@event.ServiceName}{@event.EnvironmentName}root".ToLower(); await _cpsService(@event.CPSType).DeleteService(cloudServiceName, authModel); /*Delete environment release definition*/ ReadReleaseDefinitionOptions readReleaseDefinitionOptions = new ReadReleaseDefinitionOptions(); readReleaseDefinitionOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; readReleaseDefinitionOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; readReleaseDefinitionOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; readReleaseDefinitionOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; readReleaseDefinitionOptions.OrganizationName = @event.OrganizationName; readReleaseDefinitionOptions.ProjectName = @event.ProjectName; readReleaseDefinitionOptions.ReleaseStageId = @event.ReleseStageId; var releaseDefinition = await _pipelineSpaceManagerService.GetReleaseDefinition(readReleaseDefinitionOptions); var environment = releaseDefinition.Environments.FirstOrDefault(x => x.Name.Equals(@event.EnvironmentName, StringComparison.InvariantCultureIgnoreCase)); if (environment != null) { //remove releaseDefinition.Environments.Remove(environment); var productionEnvironment = releaseDefinition.Environments.FirstOrDefault(x => x.Name.Equals(DomainConstants.Environments.Production)); var lastAvailableEnvironment = releaseDefinition.Environments.Where(x => !x.Name.Equals(DomainConstants.Environments.Production)).OrderByDescending(x => x.Id).First(); //Reorder production productionEnvironment.Rank = releaseDefinition.Environments.Count(); var productionCondition = productionEnvironment.Conditions.FirstOrDefault(); if (productionCondition != null) { productionCondition.EnvironmentId = lastAvailableEnvironment.Id; productionCondition.Name = lastAvailableEnvironment.Name; } releaseDefinition.PipelineProcess = new CMSVSTSReleaseDefinitionPipelineProcessCreateModel() { Type = "designer" }; releaseDefinition.Properties = new CMSVSTSReleaseDefinitionPropertiesCreateModel() { DefinitionCreationSource = new CMSVSTSReleaseDefinitionPropertiesItemCreateModel() { Type = "System.String", Value = "ReleaseNew" } }; UpdateReleaseDefinitionOptions updateReleaseDefinitionOptions = new UpdateReleaseDefinitionOptions(); updateReleaseDefinitionOptions.VSTSAPIVersion = _vstsOptions.Value.ApiVersion; updateReleaseDefinitionOptions.VSTSAccountName = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccountName : _fakeAccountOptions.Value.AccountId; updateReleaseDefinitionOptions.VSTSAccessSecret = @event.CMSType == ConfigurationManagementService.VSTS ? @event.CMSAccessSecret : _fakeAccountOptions.Value.AccessSecret; updateReleaseDefinitionOptions.VSTSAccountProjectId = @event.CMSType == ConfigurationManagementService.VSTS ? @event.ProjectName : @event.ProjectVSTSFakeName; updateReleaseDefinitionOptions.OrganizationName = @event.OrganizationName; updateReleaseDefinitionOptions.ProjectName = @event.ProjectName; updateReleaseDefinitionOptions.Model = releaseDefinition; await _pipelineSpaceManagerService.UpdateReleaseDefinition(updateReleaseDefinitionOptions); } }