Setting up a cross platform DevOps environment for ASP.net Core applications, we will learn how to configure a headless ubuntu server to act as TeamCity BuildAgent to use Cake to build ASP.net Core applications.
Install the prequisites
You will also need install
Mono is a platform for running and developing applications based on the ecma/iso standards. mono is an open source effort led by xamarin. mono provides a complete clr (common language runtime) including compiler and runtime, which can produce and execute cil (common intermediate language) bytecode (aka assemblies), and a class library.
Install Mono on Ubuntu
Although not strictly necessary to build .net core applications we will also install Mono on the server to facilitate the building of other .net framework applications.
You may need to first add references to the Mono Repository to ensure you get the latest versions.
mono-complete via the terminal
Test Cake Build on the server
In order to test that we have the server configured correctly We can now try out
Cake following instructions from CakeBuild.net – Getting Started example.
Install the Bootstrapper
Create a Cake script
We will use
nano to create the file
Copy & Paste the sample code
If you want more information about how to write a cake build script.
Check out How to write a Cake Build script for ASP.net core project
Change permission on
Execute the Build
We should see the following result indicating that we were able to successfully build a project using Cake on the server.
Configure as Build Agent
We are going to be using this server as an external build agent for use with TeamCity. In my scenario I have TeamCity installed on a seperate ubuntu server.
We need to install a few more pre-requisites to enable this.
Install Java JDK & JRE
TeamCity is a Java based application therefore all build agents etc have been developed using Java.
Install the default JDK in the ubuntu repository
Check your Java Version
The version information returned should be similar too
Configure JAVA_HOME environment variable
To find out where Java was installed
you should see a response similar too
Copy the path from your preferred installation and then
At the end of the file on a new line paste the following or whatever your java installation path is
Refresh your terminal windows source, to ensure it picks up you change in the current session
We can now test the environment variable has been set
Create TeamCity User on Server
We are going to create a user on our server which will we use to run the build agent. We will need to create a user with Home Directory, because this is where we are going to install the team city build agent too.
We also want to create a group for our build agents on the server, we could potentially have several builders running on the server. We create a group to add them all in.
You may also want to give your netBuild account ssh access. So to do this simply edit your ssh config to enable ssh password authentication. Typically we have this set up to only enable ssh keys, but because this user will not have ssh keys defined, we only really want to give it password access and only from computers on our network.
So to do this we will edit our ssh config
Then simply change the following.
Configure using Agent Push from TeamCity
We can now configure this server as BuildAgent from within TeamCity utilizing the
Agent Push functionality. Then simply click the install agent, then select Use Custom Setting and select Unix. Then complete the rest of the form with your details.
Set Agent to Auto Start
There are several methods you can use in Linux to set services to auto start when the server reboots.
Paste the following code, change the name of the USER variable to whatever username required to run the the script. In my case I have created an
agentuser account. You may need to change this value to suit your environment.
Provide the sufficient permissions for the file to execute
Add it to the start up process
- How to use Github actions to build & deploy Github nuget packages - October 14, 2021
- How to implement cross cutting concerns with MediatR Pipeline Behaviours - October 5, 2021
- Understanding the difference between Queue and Stack Data Structure - September 22, 2021