How to Set Up a Bitbucket Pipeline for a .NET Project

Osama HaiDer
5 min readAug 28, 2024

--

Introduction

Bitbucket Pipelines is a continuous integration and continuous deployment (CI/CD) service built into Bitbucket. It automates your build, test, and deployment processes. This guide will walk you through setting up a Bitbucket Pipeline for a .NET project from start to finish.

Step 1: Prepare Your Bitbucket Repository

1.1. Create a Bitbucket Repository

What to Do: If you don’t have a repository yet, you need to create one.

How to Do It:

  • Log in to Bitbucket.
  • Go to your Bitbucket workspace.
  • Click on Create repository.
  • Fill in the repository name and details.
  • Click Create repository.

1.2. Push Your .NET Project to Bitbucket

What to Do: Ensure your .NET project is pushed to your Bitbucket repository.

How to Do It:

  • Open your terminal or command prompt.
  • Navigate to your project directory.
  • Initialize Git and push your code:
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://bitbucket.org/yourusername/your-repo.git
git push -u origin main

Step 2: Create a Pipeline Configuration File

2.1. Create bitbucket-pipelines.yml

What to Do: Create a configuration file that Bitbucket Pipelines will use to automate tasks.

How to Do It:

  • In the root directory of your repository, create a file named bitbucket-pipelines.yml.

Step 3: Configure Each Pipeline Step

3.1. Build

Purpose: This step compiles your .NET project to ensure that there are no syntax errors and that the code builds successfully.

Configuration Explanation:

- step:
name: Build
image: mcr.microsoft.com/dotnet/sdk:7.0
caches:
- dotnetcore
script:
- dotnet build --configuration Release
  • name: Build - Defines the name of the step in the pipeline.
  • image: mcr.microsoft.com/dotnet/sdk:7.0 - Specifies the Docker image to use for this step. The .NET SDK image is required for building .NET projects.
  • caches: - Lists cached directories to speed up the build process. Here, dotnetcore is used to cache .NET dependencies.
  • script: - Lists the commands to run in this step.
  • dotnet build --configuration Release - Builds the project in Release mode. This compiles the code into a build output.

3.2. Test

Purpose: This step runs the tests to verify that your code behaves as expected.

Configuration Explanation:

- step:
name: Test
image: mcr.microsoft.com/dotnet/sdk:7.0
caches:
- dotnetcore
script:
- dotnet test --configuration Release
  • name: Test - Defines the name of the step in the pipeline.
  • image: mcr.microsoft.com/dotnet/sdk:7.0 - Specifies the Docker image to use for this step. The .NET SDK image is required for running tests.
  • caches: - Lists cached directories to speed up the test process. Here, dotnetcore is used to cache .NET dependencies.
  • script: - Lists the commands to run in this step.
  • dotnet test --configuration Release - Runs the tests in Release mode. This command executes the unit tests in your project.

3.3. Junit Test

Purpose: This step adds a test logger and runs tests with JUnit reporting to get detailed test results.

Configuration Explanation:

- step:
name: Junit Test
image: mcr.microsoft.com/dotnet/sdk:7.0
caches:
- dotnetcore
script:
- cd IOptionUnitTest # Navigate to the IOptionUnitTest directory
- dotnet add package JUnitTestLogger --version 1.1.0
- dotnet test --logger "junit"
  • name: Junit Test - Defines the name of the step in the pipeline.
  • image: mcr.microsoft.com/dotnet/sdk:7.0 - Specifies the Docker image to use for this step. The .NET SDK image is required for adding packages and running tests.
  • caches: - Lists cached directories to speed up the process. Here, dotnetcore is used to cache .NET dependencies.
  • script: - Lists the commands to run in this step.
  • cd IOptionUnitTest - Changes the directory to where your unit tests are located.
  • dotnet add package JUnitTestLogger --version 1.1.0 - Adds the JUnit test logger package to your project for generating JUnit-format test results.
  • dotnet test --logger "junit" - Runs the tests and generates test results in JUnit format.

3.4. Deploy to Production

Purpose: This step deploys your application to a production environment.

Configuration Explanation:

- step:
name: Deploy to Production
deployment: production
script:
- echo "Deploy to your prod..."
# Add your deployment scripts here
  • name: Deploy to Production - Defines the name of the step in the pipeline.
  • deployment: production - Marks this step as a deployment to the production environment.
  • script: - Lists the commands to run in this step.
  • echo "Deploy to your prod..." - Prints a message indicating that deployment is happening. This is a placeholder for actual deployment commands.

Step 4: Configure Bitbucket Pipeline Settings (Optional)

4.1. Access Repository Settings

What to Do: Set up any necessary environment variables or pipeline settings.

How to Do It:

  • Go to your Bitbucket repository.
  • Click on Repository settings.

4.2. Navigate to Pipeline Settings

  • What to Do: Configure settings for Bitbucket Pipelines.
  • How to Do It:
  • Click on Pipelines.
  • Select Settings.

4.3. Add Environment Variables (if needed)

  • What to Do: Define any environment variables or secrets your pipeline might require.
  • How to Do It:
  • Click Add variable.
  • Enter the variable name (e.g., MY_SECRET_VARIABLE) and value.
  • Click Save.

Step 5: Run Your Pipeline

5.1. Commit and Push Your Configuration

What to Do: Push the bitbucket-pipelines.yml file to your repository to trigger the pipeline.

How to Do It:

  • Use the terminal to commit and push:
git add bitbucket-pipelines.yml
git commit -m "Add Bitbucket pipeline configuration"
git push

5.2. Monitor Pipeline Execution

What to Do: Check the progress and results of your pipeline.

How to Do It:

  • Go to your Bitbucket repository.
  • Click on Pipelines to view the pipeline run and logs.

Step 6: Review and Troubleshoot

6.1. Check Logs

What to Do: Investigate any errors or issues reported during the pipeline run.

How to Do It:

  • In the Pipelines section, click on the specific pipeline run to view logs.

6.2. Fix Issues

What to Do: Make corrections based on the logs and re-run the pipeline.

How to Do It:

  • Edit your code or pipeline configuration as needed.
  • Commit and push the changes to trigger a new pipeline run.

Conclusion

You’ve now set up a Bitbucket Pipeline for your .NET project! This pipeline will automate building, testing, and deploying your code, helping you maintain continuous integration and deployment. Adjust the pipeline configuration as needed to fit your specific project requirements.

Complete Merged Configuration

Here’s the complete Bitbucket Pipeline configuration with all the steps merged:

pipelines:
default:
- step:
name: Build
image: mcr.microsoft.com/dotnet/sdk:7.0
caches:
- dotnetcore
script:
- dotnet build --configuration Release

- step:
name: Test
image: mcr.microsoft.com/dotnet/sdk:7.0
caches:
- dotnetcore
script:
- dotnet test --configuration Release

- step:
name: Junit Test
image: mcr.microsoft.com/dotnet/sdk:7.0
caches:
- dotnetcore
script:
- cd IOptionUnitTest # Navigate to the IOptionUnitTest directory
- dotnet add package JUnitTestLogger --version 1.1.0
- dotnet test --logger "junit"

- step:
name: Deploy to Production
deployment: production
script:
- echo "Deploy to your prod..."
# Add your deployment scripts here

This structured approach ensures that each step of your Bitbucket Pipeline is clearly explained and that you have a comprehensive guide for setting up your CI/CD process. Let me know if you need any more details or further assistance!

For more updates and insights, and to connect with me, feel free to follow me on LinkedIn:

🔗 [Connect on LinkedIn]

Let’s stay connected and continue the conversation!

--

--

Osama HaiDer

SSE at TEO International | .Net | Azure | AWS | Web APIs | C#