Akshay Nambiar
Akshay Nambiar

Reputation: 25

Code pipeline to build a branch on pull request

I am trying to make a code pipeline which will build my branch when I make a pull request to the master branch in AWS. I have many developers working in my organisation and all the developers work on their own branch. I am not very familiar with ccreating lambda function. Hoping for a solution

Upvotes: 1

Views: 5721

Answers (3)

mixja
mixja

Reputation: 7467

I have recently implemented an approach that uses CodeBuild GitHub webhook support to run initial unit tests and build, and then publish the source repository and built artefacts as a zipped archive to S3.

You can then use the S3 archive as a source in CodePipeline, where you can then transition your PR artefacts and code through Integration testing, Staging deployments etc...

This is quite a powerful pattern, although one trap here is that if you have a lot of pull requests being created at a single time, you can get CodePipeline executions being superseded given only one execution can proceed through a given stage at a time (this is actually a really important property, especially if your integration tests run against shared resources and you don't want multiple instances of your application running data setup/teardown tasks at the same time). To overcome this, I publish an S3 notification to an SQS FIFO queue when CodeBuild publishes the S3 artifact, and then poll the queue, copying each artifact to a different S3 location that triggers CodePipeline, but only if there are are currently no executions waiting to execute after the first CodePipeline source stage.

Upvotes: 2

Nimin Unnikrishnan
Nimin Unnikrishnan

Reputation: 383

We can very well have dynamic branching support with the following approach.

One of the limitations in AWS code-pipeline is that we have to specify branch names while creating the pipeline. We can however overcome this issue using the architecture shown below.

flow diagram

Create a Lambda function which takes the GitHub web-hook data as input, using boto3 integrate it with AWS pipeline(pull the pipeline and update), have an API gateway to make the call to the Lambda function as a rest call and at last create a web-hook to the GitHub repository.

External links:

Related thread: Dynamically change branches on AWS CodePipeline

Upvotes: 0

alwe
alwe

Reputation: 1497

You can dynamically create pipelines everytime a new pull-request has been created. Look for the CodeCommit Triggers (in the old CodePipeline UI), you need lambda for this.

Basically it works like this: Copy existing pipeline and update the the source branch.

It is not the best, but afaik the only way to do what you want.

I was there and would not recommend it for the following reasons:

  • I hit this limit of 20 in my region: "Maximum number of pipelines with change detection set to periodically checking for source changes" - but, you definitely want this feature ( https://docs.aws.amazon.com/codepipeline/latest/userguide/limits.html )
  • The branch-deleted trigger does not work correctly, so you can not delete the created pipeline, when the branch has been merged into master.

I would recommend you to use Github.com if you need a workflow as you described. Sorry for this.

Upvotes: 2

Related Questions