in spec/fixtures/cdk/no_db/rails-no-db-pipeline-stack.ts [21:112]
constructor(scope: cdk.App, id: string, props: RailsNoDbPipelineStackProps) {
super(scope, id);
const pipeline = new codepipeline.Pipeline(this, 'FargatePipeline', {
pipelineName: 'RailsNoDbPipeline',
});
const repo = new codecommit.Repository(this, 'CodeCommitRepo', {
repositoryName: 'rails',
description: 'created by aws-rails-provisioner with AWS CDK for RailsNoDb'
});
const sourceOutput = new codepipeline.Artifact();
const sourceStage = pipeline.addStage({
stageName: 'Source',
actions: [
new pipelineactions.CodeCommitSourceAction({
actionName: 'SourceAction',
repository: repo,
output: sourceOutput
})
]
});
const ecrRepo = ecr.Repository.fromRepositoryName(this, 'ImageRepo', props.repoName);
const role = new iam.Role(this, 'ImageBuildRole', {
assumedBy: new iam.ServicePrincipal('codebuild.amazonaws.com')
});
const policy = new iam.PolicyStatement();
policy.addAllResources();
policy.addActions(
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetAuthorizationToken",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
);
role.addToPolicy(policy);
const build = new codebuild.PipelineProject(this, 'ImageBuildToECR', {
projectName: 'RailsNoDbImageBuild',
description: 'build, tag and push image to ECR',
environmentVariables: {
'REPO_NAME': {
value: ecrRepo.repositoryName,
type: codebuild.BuildEnvironmentVariableType.PLAINTEXT
},
'REPO_PREFIX': {
value: ecrRepo.repositoryUri,
type: codebuild.BuildEnvironmentVariableType.PLAINTEXT
},
},
environment: {
buildImage: codebuild.LinuxBuildImage.UBUNTU_14_04_DOCKER_18_09_0,
privileged: true
},
buildSpec: codebuild.BuildSpec.fromSourceFilename('buildspec-ecr.yml'),
role: role
});
const buildOutput = new codepipeline.Artifact();
const buildStage = pipeline.addStage({
stageName: 'Build',
placement: {
justAfter: sourceStage
},
actions: [
new pipelineactions.CodeBuildAction({
actionName: 'ImageBuildAction',
input: sourceOutput,
outputs: [ buildOutput ],
project: build
})
]
});
pipeline.addStage({
stageName: 'Deploy',
placement: {
justAfter: buildStage
},
actions: [
new pipelineactions.EcsDeployAction({
actionName: 'FargateDeployAction',
service: props.service,
input: buildOutput
})
]
});
}