modules/accelerator/aws-codepipeline/codepipeline.tf (168 lines of code) (raw):
# Full CodePipeline
resource "aws_codepipeline" "codepipeline" {
count = var.target_type == "instance" ? 1 : 0
name = "${var.repo_name}-${var.region_name}"
role_arn = var.codepipeline_role
artifact_store {
location = var.build_artifact_bucket
type = "S3"
encryption_key {
id = var.aws_kms_key
type = "KMS"
}
}
stage {
name = "Source"
action {
name = "Source"
category = "Source"
owner = "AWS"
provider = var.source_provider
version = "1"
output_artifacts = ["source"]
namespace = "SourceVariables"
configuration = var.source_provider == "CodeStarSourceConnection" ? data.template_file.github_bitbucket_config[0].vars : local.codecommit
}
}
stage {
name = "Test"
action {
run_order = 1
name = "Test-Sonar"
category = "Test"
owner = "AWS"
provider = "CodeBuild"
input_artifacts = ["source"]
output_artifacts = ["tested"]
version = "1"
configuration = {
ProjectName = aws_codebuild_project.test_project.name
}
}
action {
run_order = 2
name = "Unit-Tests"
category = "Test"
owner = "AWS"
provider = "CodeBuild"
input_artifacts = ["source"]
output_artifacts = ["unit_tested"]
version = "1"
configuration = {
ProjectName = aws_codebuild_project.unit_project.name
}
}
}
stage {
name = "Build"
action {
name = "Package"
category = "Build"
owner = "AWS"
provider = "CodeBuild"
input_artifacts = ["source"]
output_artifacts = ["packaged"]
version = "1"
configuration = {
ProjectName = aws_codebuild_project.build_project.name
EnvironmentVariables = "[{\"name\":\"Release_ID\",\"value\":\"#{codepipeline.PipelineExecutionId}\",\"type\":\"PLAINTEXT\"},{\"name\":\"Commit_ID\",\"value\":\"#{SourceVariables.CommitId}\",\"type\":\"PLAINTEXT\"}]"
}
}
}
stage {
name = "DEV"
action {
name = "Deploy-to-DEV"
run_order = 1
category = "Deploy"
owner = "AWS"
provider = "CodeDeploy"
namespace = "Deploy-to-DEV"
input_artifacts = [
"packaged"
]
version = "1"
configuration = {
DeploymentGroupName = aws_codedeploy_deployment_group.ec2[0].deployment_group_name
ApplicationName = aws_codedeploy_app.application[0].name
}
}
}
stage {
name = "QA"
action {
name = "Deploy-to-QA"
run_order = 1
category = "Deploy"
owner = "AWS"
provider = "CodeDeploy"
namespace = "Deploy-to-QA"
input_artifacts = [
"packaged"
]
version = "1"
configuration = {
DeploymentGroupName = aws_codedeploy_deployment_group.ec2[1].deployment_group_name
ApplicationName = aws_codedeploy_app.application[0].name
}
}
action {
name = "Selenium-QA"
run_order = 2
category = "Build"
owner = "AWS"
provider = "CodeBuild"
input_artifacts = [
"packaged"
]
version = "1"
configuration = {
ProjectName = aws_codebuild_project.test_selenium.name
}
}
action {
category = "Test"
name = "DLT-QA"
run_order = 3
owner = "AWS"
provider = "CodeBuild"
version = "1"
input_artifacts = [
"packaged"
]
configuration = {
ProjectName = aws_codebuild_project.test_perf.name
}
}
}
stage {
name = "UAT"
action {
run_order = 1
name = "Manual-Approve"
category = "Approval"
owner = "AWS"
provider = "Manual"
version = "1"
configuration = {
NotificationArn = var.approve_sns_arn
CustomData = "Approve action needed"
}
}
action {
name = "Deploy-to-UAT"
run_order = 2
category = "Deploy"
owner = "AWS"
provider = "CodeDeploy"
namespace = "Deploy-to-UAT"
input_artifacts = [
"packaged"
]
version = "1"
configuration = {
DeploymentGroupName = aws_codedeploy_deployment_group.ec2[2].deployment_group_name
ApplicationName = aws_codedeploy_app.application[0].name
}
}
}
}