Atlassian recently announced continuous delivery inside Bitbucket with Pipelines - build, test and deploy from Bitbucket. Shortly after Microsoft announced the release of .NET Core 1.0. Pipelines can build Node, Ruby, Python, PHP and anything else you can run in a Docker image - including .NET Core. Take a look how to use Pipelines to not only build a .NET Core project, but test it as well!
The Solution
The solution comprises of two projects MathDemo and MathDemo.Tests. I have adopted Microsoft’s recommended directory structure with two parent directories - src and test.
You can take a look at the working example here on Bitbucket.
/pipelines-dotnet-demo
|__global.json
|__/src
|__/MathService
|__Source Files
|__project.json
/test
|__/MathService.Tests
|__Test Files
|__project.json
Take a look at Microsoft’s documentation, to understand Unit Testing in .NET Core.
For this example, I have created a simple, and straightforward portable class library in .NET Core and a corresponding test class using Xunit. You can take a look at the code here:
- Source - MathService.cs
- Tests - MathServiceTests.cs
Pipelines Configuration
To run a build, you need a valid bitbucket-pipelines.yml file with a branch-specific or default pipeline configuration in the root of your repository.
I used the following…
image: microsoft/dotnet:onbuild
pipelines:
default:
- step:
script:
- dotnet restore
- dotnet test test/MathDemo.Tests
The first line tells Pipelines which image to use as the runtime environment - in this case Microsoft’s official .NET Core image. This can, of course, be any image from Docker’s registry or your own.
Rather than a branch-specific configuration, I used default. Using the dotnet
CLI the script runs dotnet restore
to restore the dependencies and tools and dotnet test
to build the necessary projects and execute the unit tests.
And that’s it! Now, every push to Bitbucket triggers a build. You can see an example here.
You also get a really nice summary of each build.
And a detailed output from the build log.
=== TEST EXECUTION SUMMARY ===
MathDemo.Tests Total: 4, Errors: 0, Failed: 0, Skipped: 0, Time: 0.181s
SUMMARY: Total: 1 targets, Passed: 1, Failed: 0.
I can’t wait to see what Atlassian do with Pipelines next. For example, I’m hoping for the ability to publish build artifacts or indeed a Docker image ready for deployment.