Beispiel #1
0
        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);
        }
Beispiel #2
0
        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"
                    });
                }
            }
        }
Beispiel #3
0
        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);
        }