in lib/eks-worker-pipeline.ts [19:156]
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
const eksUpdatePipelineRepo = new codecommit.Repository(this, 'eksUpdatePipelineRepo', {
repositoryName: "EksUpdatePipelineRepo",
description: "Source Repositury for EKS Worker Update"
})
const eksUpdatePipelineArtifactBucket = new s3.Bucket(this, 'eksUpdatePipelineArtifactBucket', {
versioned: false
});
const eksUpdateSnsApprovalTopic = new sns.Topic(this, 'eksUpdateSnsApprovalTopic');
const workerCodeBuildRole = iam.Role.fromRoleArn(this, 'workerCodeBuildRoleArn',
ssm.StringParameter.fromStringParameterName(
this, 'workerCodeBuildRoleArnParam', '/eks/ami-test-cluster/workerCodeBuildRoleArn').stringValue
)
const buildEksTest = new codebuild.Project(this, 'buildEksTest', {
role: workerCodeBuildRole,
buildSpec: codebuild.BuildSpec.fromObject({
version: '0.2',
phases: {
pre_build: {
commands: [
'echo "Install Dependencies"',
'npm install -g typescript',
'npm install -g aws-cdk',
'curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.10/2020-02-22/bin/linux/amd64/kubectl',
'chmod +x ./kubectl',
'mv ./kubectl /usr/local/bin/kubectl',
'kubectl version --client',
`aws eks update-kubeconfig --name ${config.cluster_name} --region ${config.region}`
]
},
build: {
commands: [
'npm install',
'npm run build',
'cdk ls'
]
},
post_build: {
commands: [
"./scripts/update-part1.sh"
]
}
}
})
});
const buildEksUpdate = new codebuild.Project(this, 'buildEksUpdate', {
role: workerCodeBuildRole,
buildSpec: codebuild.BuildSpec.fromObject({
version: '0.2',
phases: {
pre_build: {
commands: [
'echo "Install Dependencies"',
'npm install -g typescript',
'npm install -g aws-cdk',
'curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.10/2020-02-22/bin/linux/amd64/kubectl',
'chmod +x ./kubectl',
'mv ./kubectl /usr/local/bin/kubectl',
'kubectl version --client',
`aws eks update-kubeconfig --name ${config.cluster_name} --region ${config.region}`
]
},
build: {
commands: [
'npm install',
'npm run build',
'cdk ls'
]
},
post_build: {
commands: [
"./scripts/update-part2.sh"
]
}
}
})
});
const sourceOutput = new codepipeline.Artifact();
new codepipeline.Pipeline(this, 'EksUpdatePipeline', {
pipelineName: 'EksUpdatePipeline',
artifactBucket: eksUpdatePipelineArtifactBucket,
stages: [ {
stageName: "Source",
actions : [
new codepipeactions.CodeCommitSourceAction({
actionName: 'CodeCommitSource',
branch: 'master',
output: sourceOutput,
repository: eksUpdatePipelineRepo
})
],
},
{
stageName: "Test",
actions : [
new codepipeactions.CodeBuildAction({
actionName: "TestNodeGroup",
input: sourceOutput,
project: buildEksTest,
type: codepipeactions.CodeBuildActionType.BUILD,
}),
],
},
{
stageName: "Approve",
actions : [
new codepipeactions.ManualApprovalAction({
actionName: "ApproveNodeUpdate",
notificationTopic: eksUpdateSnsApprovalTopic,
notifyEmails: [config.pipeline_approval_email]
}),
],
},
{
stageName: "Update",
actions : [
new codepipeactions.CodeBuildAction({
actionName: "UpdateNodeGroup",
input: sourceOutput,
project: buildEksUpdate,
type: codepipeactions.CodeBuildActionType.BUILD,
}),
],
},
]
});
}