This guide explains how to create a CI/CD pipeline for a Ballerina project.
Continuous Integration and Continuous Deployment (CI/CD) pipelines are essential for modern software development. They automate the process of building, testing, and deploying applications, ensuring faster delivery and higher quality.
Why CI/CD for Ballerina?
Ballerina is designed for building cloud-native applications, making it a great fit for modern development practices. A CI/CD pipeline for Ballerina offers several benefits.
- Automate testing to catch bugs early.
- Build and package your application for deployment.
- Push your Ballerina modules to Ballerina Central or container registries.
- Ensure consistency across development, testing, and production environments.
With Ballerina, you gain the flexibility to implement CI/CD pipelines universally across automation-supporting platforms. Whether you prefer GitHub, GitLab, Bitbucket, or another CI/CD tool, the core steps remain the same. Below are the sample configurations for popular platforms to get started quickly.
GitHub Actions for Ballerina
GitHub Actions is a powerful CI/CD tool integrated directly into GitHub repositories. Here’s how you can set up a pipeline for your Ballerina project.
-
In your repository, create a
.github/workflows/ballerina-ci.yml
file. -
Below is an example workflow that tests, builds, and pushes your Ballerina project.
name: Ballerina CI/CD Pipeline on: [push, pull_request] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v3 - name: Set up Ballerina uses: ballerina-platform/setup-ballerina@v1 with: version: 2201.11.0 # Specify the Ballerina version - name: Cache Ballerina Dependencies uses: actions/cache@v3 with: path: ~/.ballerina key: ballerina-deps-${{ hashFiles('**/Ballerina.toml') }} restore-keys: | ballerina-deps- - name: Run Tests run: bal test - name: Build Ballerina Project run: bal pack - name: Push to Ballerina Central run: bal push env: BALLERINA_CENTRAL_ACCESS_TOKEN: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }} # Optional: Docker Build and Push - name: Build Docker Image run: bal build --cloud=docker - name: Push Docker Image run: | # Replace the docker image name, version and repository with correct values echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin docker push my-ballerina-app:${{ github.sha }}
- Dependency caching: Speeds up builds by caching Ballerina dependencies.
- Ballerina Central integration: Pushes modules to Ballerina Central using a secure token.
- Docker support: Builds and pushes Docker images if your project requires containerization.
To use this workflow, you need to add the BALLERINA_CENTRAL_ACCESS_TOKEN
and DOCKER_USERNAME
and DOCKER_PASSWORD
secrets to your repository. Ballerina Central access token can be generated from Ballerina Central.
Docker username and password can be obtained from Docker Hub. Replace the docker image name, version, and repository with the correct values.
GitLab CI/CD for Ballerina
GitLab CI/CD is another popular tool for automating software development workflows. Here’s how to set up a pipeline for a Ballerina project.
-
Create a
.gitlab-ci.yml
file in the root of your repository. -
Add the following pipeline configuration to the file.
stages: - test - build - push variables: BALLERINA_VERSION: "2201.11.0" # Specify the Ballerina version cache: key: ballerina-deps-$CI_COMMIT_REF_SLUG paths: - ~/.ballerina/ before_script: - apt-get update && apt-get install -y curl unzip - curl -L -o ballerina-$BALLERINA_VERSION-swan-lake-linux-x64.deb https://dist.ballerina.io/downloads/$BALLERINA_VERSION/ballerina-$BALLERINA_VERSION-swan-lake-linux-x64.deb - dpkg -i ballerina-$BALLERINA_VERSION-swan-lake-linux-x64.deb - bal version test: stage: test script: - bal test build: stage: build script: - bal build push: stage: push script: - bal pack - bal push only: - main environment: name: production variables: BALLERINA_CENTRAL_ACCESS_TOKEN: $BALLERINA_CENTRAL_ACCESS_TOKEN
- Ballerina setup: Automatically installs the specified Ballerina version.
- Dependency caching: Caches dependencies to speed up builds.
- Ballerina Central integration: Pushes modules to Ballerina Central.
To use this workflow, you need to add the BALLERINA_CENTRAL_ACCESS_TOKEN
secret to your repository. Ballerina Central access token can be generated from Ballerina Central.
Bitbucket pipelines for Ballerina
Bitbucket Pipelines is a CI/CD tool integrated into Bitbucket repositories. Here’s how to set up a pipeline for your Ballerina project.
-
Create a
bitbucket-pipelines.yml
file in the root of your repository. -
Add the following pipeline configuration to the file.
image: ballerina/ballerina:2201.11.0 # Specify the Ballerina version pipelines: default: - step: name: Run Tests caches: - ballerina script: - bal test - step: name: Build Project caches: - ballerina script: - bal pack - step: name: Push to Ballerina Central script: - export BALLERINA_CENTRAL_ACCESS_TOKEN=$BALLERINA_CENTRAL_ACCESS_TOKEN - bal push pull-requests: "**": - step: name: Build and Test PR caches: - ballerina script: - bal test - bal pack definitions: caches: ballerina: ~/.ballerina
- Dependency caching: Caches Ballerina dependencies for faster builds.
- Pull request support: Runs tests and builds for pull requests.
- Ballerina Central integration: Pushes modules to Ballerina Central.
To use this workflow, you need to add the BALLERINA_CENTRAL_ACCESS_TOKEN
secret to your repository. Ballerina Central access token can be generated from Ballerina Central.
Best practices for Ballerina CI/CD pipelines
-
Use environment variables: Store sensitive data like tokens and credentials in environment variables or secrets.
-
Cache dependencies: Cache Ballerina dependencies to speed up builds.
-
Add notifications: Integrate notifications (e.g., Slack, email) to alert teams about build status.
-
Test across multiple Ballerina versions: Use matrix builds to test your project against multiple Ballerina versions.
-
Containerize your application: If your project requires containerization, add Docker build and push steps to your pipeline.
Setting up a CI/CD pipeline for your Ballerina project is a straightforward process that can significantly improve your development workflow. Whether you use GitHub Actions, GitLab CI/CD, or Bitbucket Pipelines, automating your build, test, and deployment processes ensures faster delivery and higher-quality applications. By following the steps and best practices outlined in this article, you’ll be well on your way to building a robust CI/CD pipeline for your Ballerina projects.