private List <WorkflowTask> GetWorkflowTasks(CreateReleaseDefinitionQuery message, Model.Environment environment) { var workflowTasks = new List <WorkflowTask>(); if (message.NeedsAWSAurora) { if (message.NeedsAwsUserAccountCreated) { workflowTasks.Add(BuildWorkflowTaskCreateUserStack(message, environment)); } workflowTasks.Add(BuildWorkflowTaskReuseDatabaseStack(message, environment)); workflowTasks.Add(BuildWorkflowTaskCreateDatabase(message, environment)); workflowTasks.Add(BuildWorkflowTaskCreateDatabaseUser(message, environment)); workflowTasks.Add(BuildWorkflowTaskRunFlywayMigrations(message, environment)); } if (message.NeedsDCOS) { workflowTasks.Add(BuildWorkflowTaskDcosDeploy(message, environment)); } return(workflowTasks); }
private void AddEnvironmentVariables(CreateReleaseDefinitionQuery message, Model.Environment environment, string buildDefinitionName, IDictionary <string, ConfigurationVariableValue> variables) { var tag = environment.tag; var TAG = environment.TAG; if (message.NeedsDCOS) { var dcosServer = GetDcosServer(environment); variables.Add("DCOS_URL", new ConfigurationVariableValue { Value = $"https://dcos.{dcosServer}.company.io/" }); variables.Add("DCOS_USERNAME", new ConfigurationVariableValue { Value = "tfs" }); } variables.Add("AppName", new ConfigurationVariableValue { Value = $"/{message.ServiceName.ToLower()}/{tag}/{message.ServiceName.ToLower()}" }); variables.Add("ArtifactAlias", new ConfigurationVariableValue { Value = $"$(System.ArtifactsDirectory)/{buildDefinitionName}/drop" }); variables.Add("EnvironmentTag", new ConfigurationVariableValue { Value = TAG }); //todo: Variable Groups are using Neutron for Dev, but on DCOS, its using $Host, so it queries Quark, I think. I had the wrong port so that may not be what was happening variables.Add("ConfigSvcTarget", new ConfigurationVariableValue { Value = $"$({TAG}_ConfigSvcTarget)" }); if (message.NeedsAWS) { var altEnv = environment; if (environment.EnvironmentTag == Model.EnvironmentTag.Alpha) { //there isn't a ALPHA version, so reuse QA //todo: see if Vince can create ALPHA_ACCESS_KEY_ID altEnv = new Model.Environment { EnvironmentTag = Model.EnvironmentTag.QA }; } var awsAccessKeyId = $"$({altEnv.TAG}_AWS_ACCESS_KEY_ID)"; variables.Add("AWS_ACCESS_KEY_ID", new ConfigurationVariableValue { Value = awsAccessKeyId }); var awsASecretAccessKey = $"$({altEnv.TAG}_AWS_SECRET_ACCESS_KEY)"; variables.Add("AWS_SECRET_ACCESS_KEY", new ConfigurationVariableValue { Value = awsASecretAccessKey }); if ((message.IsProdPath)) { variables.Add("DB_STACK_NAME", new ConfigurationVariableValue { Value = $"{message.ReuseAwsStackFromServiceName.ToLower()}-{TAG}" }); } else { //atleast for feature flag stacks, dev/qa were created as lower case //todo: get them constent variables.Add("DB_STACK_NAME", new ConfigurationVariableValue { Value = $"{message.ReuseAwsStackFromServiceName.ToLower()}-{tag}" }); } if (message.NeedsAwsUserAccountCreated) { variables.Add("USER_STACK_NAME", new ConfigurationVariableValue { Value = $"{message.ServiceName}userstack" }); variables.Add("USER_TEMPLATE_PATH", new ConfigurationVariableValue { Value = $"$(System.ArtifactsDirectory)/{buildDefinitionName}/drop" }); } } }
private ReleaseDefinitionEnvironment BuildEnvironment(CreateReleaseDefinitionQuery message, Model.Environment environment, string buildDefinitionName) { List <WorkflowTask> workflowTasks = GetWorkflowTasks(message, environment); var releaseDefinitionEnvironment = new ReleaseDefinitionEnvironment() { Name = environment.EnvironmentName, Variables = new Dictionary <string, ConfigurationVariableValue>(), RetentionPolicy = new EnvironmentRetentionPolicy { DaysToKeep = 30, ReleasesToKeep = 1 }, PreDeployApprovals = new ReleaseDefinitionApprovals() { Approvals = new List <ReleaseDefinitionApprovalStep>() { new ReleaseDefinitionApprovalStep() { Rank = 1, IsAutomated = true } } }, PostDeployApprovals = new ReleaseDefinitionApprovals() { Approvals = new List <ReleaseDefinitionApprovalStep> { new ReleaseDefinitionApprovalStep() { Rank = 1, IsAutomated = true } } }, DeployPhases = new List <DeployPhase>() { new AgentBasedDeployPhase() { Name = "Run on agent", Rank = 1, DeploymentInput = new AgentDeploymentInput() { QueueId = 7 //linux //todo }, WorkflowTasks = workflowTasks } }, Conditions = new List <Condition>() { new Condition("ReleaseStarted", ConditionType.Event, string.Empty) } }; AddEnvironmentVariables(message, environment, buildDefinitionName, releaseDefinitionEnvironment.Variables); return(releaseDefinitionEnvironment); }