CodePipeline Integration with On-Prem Bitbucket Server: A Step-by-Step Guide
Image by Kanti - hkhazo.biz.id

CodePipeline Integration with On-Prem Bitbucket Server: A Step-by-Step Guide

Posted on

In today’s fast-paced software development landscape, automating the build, test, and deployment process is crucial for efficient and reliable software delivery. AWS CodePipeline, a continuous integration and continuous deployment (CI/CD) service, offers a robust solution for automating these processes. However, integrating CodePipeline with on-premises Bitbucket Server can be a daunting task, especially for those new to CI/CD pipelines.

Why Integrate CodePipeline with On-Prem Bitbucket Server?

Before we dive into the integration process, let’s explore the benefits of integrating CodePipeline with on-prem Bitbucket Server:

  • Version Control System (VCS) Integration: Bitbucket Server provides a robust VCS for managing your codebase, while CodePipeline automates the build, test, and deployment process. Integration enables seamless interaction between the two systems.
  • Automated Testing and Deployment: CodePipeline’s automated testing and deployment capabilities ensure that your code changes are thoroughly tested and deployed to production quickly and reliably.
  • Enhanced Collaboration: Integration enables developers to focus on writing code while CodePipeline handles the build, test, and deployment process, ensuring that everyone is on the same page.

Prerequisites for CodePipeline Integration with On-Prem Bitbucket Server

Before proceeding with the integration, ensure you have the following:

  • An AWS account with CodePipeline enabled.
  • An on-premises Bitbucket Server installation (version 5.10 or later).
  • A Bitbucket Server administrator account with permissions to create and manage repositories.
  • A CodePipeline administrator account with permissions to create and manage pipelines.
  • A basic understanding of AWS services, including IAM roles and permissions.

Step 1: Create an IAM Role for CodePipeline

Create an IAM role that grants CodePipeline the necessary permissions to interact with your Bitbucket Server instance:


aws iam create-role --role-name CodePipeline- Bitbucket-Integration-Role --assume-role-policy-document file://trust-policy.json

Create a file named `trust-policy.json` with the following content:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "codepipeline.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Attach the necessary policies to the IAM role using the following command:


aws iam attach-role-policy --role-name CodePipeline-Bitbucket-Integration-Role --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
aws iam attach-role-policy --role-name CodePipeline-Bitbucket-Integration-Role --policy-arn arn:aws:iam::aws:policy/CodePipelineExecutionRole

Step 2: Create a Bitbucket Server OAuth Consumer

Create a Bitbucket Server OAuth consumer to enable CodePipeline to authenticate with your Bitbucket Server instance:

In your Bitbucket Server instance, navigate to Admin > OAuth Consumers and create a new OAuth consumer:

Field Value
Name CodePipeline OAuth Consumer
URL https://codepipeline.amazonaws.com
Description OAuth consumer for CodePipeline integration

Note the Client ID and Client Secret values, as you’ll need them later.

Step 3: Configure CodePipeline to Use the Bitbucket Server OAuth Consumer

In the AWS Management Console, navigate to CodePipeline > Pipelines and create a new pipeline:

In the Source stage, select Bitbucket as the source provider and enter the following:

Field Value
Repository URL https://your-bitbucket-server.com/scm/your-repo.git
Username The Bitbucket Server administrator account username
Password The Bitbucket Server administrator account password
OAuth Token The Client ID and Client Secret values from the Bitbucket Server OAuth consumer, separated by a colon (e.g., CLIENT_ID:CLIENT_SECRET)

Step 4: Configure the CodePipeline to Use the IAM Role

In the Build stage, select AWS CodeBuild as the build provider and enter the following:


aws codebuild create-project --name CodePipeline-Bitbucket-Integration-Project --description "CodePipeline project for Bitbucket Server integration"
aws codebuild update-project --name CodePipeline-Bitbucket-Integration-Project --service-role CodePipeline-Bitbucket-Integration-Role

In the Deploy stage, select S3 as the deployment provider and enter the following:


aws s3api create-bucket --bucket codepipeline-bitbucket-integration-bucket
aws s3api put-bucket-policy --bucket codepipeline-bitbucket-integration-bucket --policy file://s3-bucket-policy.json

Create a file named `s3-bucket-policy.json` with the following content:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::your-aws-account-id:role/CodePipeline-Bitbucket-Integration-Role"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::codepipeline-bitbucket-integration-bucket"
    }
  ]
}

Conclusion

By following these steps, you’ve successfully integrated CodePipeline with your on-prem Bitbucket Server instance. This integration enables automated build, test, and deployment of your code changes, ensuring efficient and reliable software delivery. Remember to customize the pipeline to fit your specific needs and requirements.

Integrating CodePipeline with on-prem Bitbucket Server may seem complex, but the benefits of automating your software development lifecycle make it well worth the effort. Happy coding!

Frequently Asked Question

Get the inside scoop on integrating CodePipeline with on-prem Bitbucket Server!

How does CodePipeline integrate with on-prem Bitbucket Server?

CodePipeline integrates with on-prem Bitbucket Server using OAuth authentication, allowing you to connect your Bitbucket Server repository to CodePipeline. This enables you to automate your CI/CD pipeline using CodePipeline’s workflow features, while still maintaining control over your codebase in your on-prem Bitbucket Server.

What are the benefits of integrating CodePipeline with on-prem Bitbucket Server?

By integrating CodePipeline with on-prem Bitbucket Server, you can leverage the strengths of both tools. You get the scalability, security, and reliability of CodePipeline, while still maintaining control over your codebase and repository within your on-prem environment. This integration also enables automation of your CI/CD pipeline, reducing manual errors and increasing deployment speed.

Does CodePipeline support multiple Bitbucket Server repositories?

Yes, CodePipeline supports multiple Bitbucket Server repositories. You can connect multiple repositories to CodePipeline, allowing you to manage multiple projects and automate their CI/CD pipelines from a single platform.

How do I configure CodePipeline to trigger builds from my on-prem Bitbucket Server repository?

To configure CodePipeline to trigger builds from your on-prem Bitbucket Server repository, you’ll need to create a webhook in your Bitbucket Server repository that notifies CodePipeline of changes. Then, in CodePipeline, create a source action that points to your Bitbucket Server repository, and configure the webhook to trigger the pipeline execution.

Can I use CodePipeline with on-prem Bitbucket Server behind a firewall or proxy?

Yes, CodePipeline can be used with on-prem Bitbucket Server behind a firewall or proxy. You’ll need to configure CodePipeline to use a private connection to your on-prem environment, using options like VPC endpoints or AWS PrivateLink. This ensures secure communication between CodePipeline and your on-prem Bitbucket Server repository.