Define an Empty Pipeline #
Now we are ready to define the basics of the pipeline.
Return to the file WorkshopPipelineStack.java
and edit as follows:
package com.myorg;
import java.util.List;
import java.util.Map;
import software.constructs.Construct;
import software.amazon.awscdk.Stack;
import software.amazon.awscdk.StackProps;
import software.amazon.awscdk.pipelines.CodeBuildStep;
import software.amazon.awscdk.pipelines.CodePipeline;
import software.amazon.awscdk.pipelines.CodePipelineSource;
import software.amazon.awscdk.services.codecommit.Repository;
import software.amazon.awscdk.services.codepipeline.actions.CodeCommitSourceAction;
public class WorkshopPipelineStack extends Stack {
public WorkshopPipelineStack(final Construct parent, final String id) {
this(parent, id, null);
}
public WorkshopPipelineStack(final Construct parent, final String id, final StackProps props) {
super(parent, id, props);
// This creates a new CodeCommit repository called 'WorkshopRepo'
final Repository repo = Repository.Builder.create(this, "WorkshopRepo")
.repositoryName("WorkshopRepo")
.build();
// The basic pipeline declaration. This sets the initial structure
// of our pipeline
final CodePipeline pipeline = CodePipeline.Builder.create(this, "Pipeline")
.pipelineName("WorkshopPipeline")
.synth(CodeBuildStep.Builder.create("SynthStep")
.input(CodePipelineSource.codeCommit(repo, "main"))
.installCommands(List.of(
"npm install -g aws-cdk" // Commands to run before build
))
.commands(List.of(
"mvn package", // Language-specific build commands
"npx cdk synth" // Synth command (always same)
)).build())
.build();
}
}
Component Breakdown #
The above code does several things:
CodePipeline.Builder.create(...)
: This initializes the pipeline with the required values. This will serve as the base component moving forward. Every pipeline requires at bare minimum:synth(...)
: ThesynthAction
of the pipeline will take the source artifact generated in by theinput
and build the application based on thecommands
. This is always followed bynpx cdk synth
. Theinput
of the synth step will check the designated repository for source code and generate an artifact.
Deploy Pipeline and See Result #
All that’s left to get our pipeline up and running is to commit our changes and run one last cdk deploy.
git commit -am "MESSAGE" && git push
mvn package
npx cdk deploy
CdkPipelines auto-update for each commit in a source repo, so this is the last time we will need to execute this command!
Once deployment is finished, you can go to the CodePipeline console and you will see a new pipeline! If you navigate to it, it should look like this: