![]()
From Code to Cloud: Deploying to AWS, Azure, or GCP with Bitbucket Pipelines
So, you’ve got your code humming along in your Bitbucket repository. Awesome! Now it’s time to unleash it onto the world (or at least, a production environment) using the power of the cloud. But how do you get it there smoothly and reliably? Enter Bitbucket Pipelines!
This blog post will walk you through how to set up Bitbucket Pipelines to automatically deploy your code to AWS, Azure, or GCP, making your life easier and your deployments less error-prone. Don’t worry if you’re new to this, we’ll break it down step-by-step.
What are Bitbucket Pipelines?
Think of Bitbucket Pipelines as your automated assistant for code deployment. It’s a built-in feature of Bitbucket that allows you to define a series of tasks (called a pipeline) that are automatically executed whenever you push changes to your repository. This pipeline can handle everything from running tests to building your application, and finally, deploying it to your chosen cloud platform.
Why Use Bitbucket Pipelines for Deployments?
- Automation: No more manual deployments! One push, and your code is on its way.
- Consistency: Ensure your deployments are always done the same way, reducing errors.
- Faster Deployments: Automate the process and release new features quicker.
- Version Control: Your deployment configuration is stored in your repository, making it easy to track changes and revert if needed.
- Integration: It’s already built into Bitbucket!
Getting Started: The bitbucket-pipelines.yml File
The heart of Bitbucket Pipelines is the bitbucket-pipelines.yml file. This file lives in the root of your repository and tells Bitbucket Pipelines what to do. Let’s look at a basic example, and then we’ll break it down:
pipelines:
default:
- step:
name: Deploy to AWS S3
image: atlassian/aws-cli:latest # Using a pre-built AWS CLI image
script:
- pipe: atlassian/aws-s3-deploy:1.1.0
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
S3_BUCKET: 'your-s3-bucket-name'
LOCAL_PATH: 'dist' # Assuming your build output is in 'dist' folder
Breaking it Down:
pipelines:: The root element of the configuration.default:: Defines the pipeline that runs on every branch. You can also configure pipelines to run on specific branches or pull requests.step:: Represents a single task in the pipeline.name:: A friendly name for the step (e.g., “Deploy to AWS S3”).image:: Specifies the Docker image to use for this step. In this case, we’re usingatlassian/aws-cli:latest, which provides the AWS command-line interface.script:: A list of commands to execute within the Docker container.pipe: atlassian/aws-s3-deploy:1.1.0: This is where the magic happens! We’re using a pre-built “pipe” from Atlassian to simplify the deployment process. Pipes are reusable components that handle common tasks.variables:: Specifies the variables required by the pipe.AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_DEFAULT_REGION: These are your AWS credentials, which you should NEVER hardcode in your YAML file. We’ll talk about setting these up securely in a moment.S3_BUCKET: The name of your AWS S3 bucket.LOCAL_PATH: The directory containing the files you want to deploy.
Securing Your Credentials:
Storing your cloud credentials directly in the bitbucket-pipelines.yml file is a huge security risk. Instead, use Bitbucket Repository Variables.
- Go to your Bitbucket repository.
- Click on Settings (usually found in the left-hand menu).
- Select Repository variables under the “Pipelines” section.
- Add variables for
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY, andAWS_DEFAULT_REGION. Make sure to mark them as “Secured” so they are masked in the pipeline logs.
Deployment Examples for Different Cloud Providers:
The general process is the same for each cloud provider:
- Choose a Docker Image: Find a Docker image that provides the necessary command-line tools for your chosen provider (AWS CLI, Azure CLI, GCP SDK).
- Use a Pipe (Recommended): Atlassian provides pipes for deploying to common services. Search for “Bitbucket Pipelines pipes” to find options for AWS, Azure, and GCP.
- Set Up Credentials as Repository Variables: Never hardcode your credentials!
Here are some examples (using pipes where available):
- AWS S3 (as shown above): Use the
atlassian/aws-s3-deploypipe. - Azure App Service:
pipelines: default: - step: name: Deploy to Azure App Service image: microsoft/azure-cli:latest script: - pipe: microsoft/azure-app-service-deploy:1.0.1 variables: AZURE_APP_ID: $AZURE_APP_ID AZURE_PASSWORD: $AZURE_PASSWORD AZURE_TENANT_ID: $AZURE_TENANT_ID AZURE_APP_NAME: 'your-azure-app-service-name' PACKAGE: 'dist' # Assuming your build output is in 'dist' folder - Google Cloud Storage (GCS):
pipelines: default: - step: name: Deploy to Google Cloud Storage image: google/cloud-sdk:latest script: - pipe: atlassian/gcloud-deploy:0.7.0 variables: GCLOUD_KEY_FILE: $GCLOUD_KEY_FILE GCS_BUCKET: 'gs://your-gcp-bucket-name' LOCAL_PATH: 'dist' # Assuming your build output is in 'dist' folder
Important Notes:
- Permissions: Make sure the credentials you’re using have the necessary permissions to deploy to your cloud services. For example, your AWS credentials need write access to your S3 bucket.
- Build Step: Before deploying, you usually need to build your application. Add a step before the deployment step to run build commands (e.g.,
npm install,npm run build). - Error Handling: Pipelines can fail! Check the logs in Bitbucket to diagnose and fix any issues.
- Customization: Pipes offer a great starting point, but you can always customize them or write your own scripts to handle more complex deployment scenarios.
Conclusion:
Bitbucket Pipelines provide a powerful and easy-to-use way to automate your deployments to AWS, Azure, or GCP. By using pipes and securing your credentials with repository variables, you can streamline your development workflow and deploy your code with confidence. Experiment with different pipes and configurations to find the perfect setup for your project! Happy deploying!