Deploy a GitLab runner on Clever Cloud
Clever Cloud (https://www.clever-cloud.com/) is a PaaS platform where you can easily deploy your WebApps with a simple
git push of your source code (see https://www.clever-cloud.com/doc/clever-cloud-overview/add-application/).
But you can deploy something else than code. And on this rainy Sunday, I decided to deploy a GitLab runner on Clever Cloud. A GitLab runner is the executable that will make the builds of your project, will run the tests with each commits … and finally who will “discuss” with GitLab CI to give the results of builds, tests, … to the GitLab platform (GitLab.com or your own instance).
There are a lot of possibilities. But today I will limit myself to a simple runner: a “shell” runner, that will download the dependencies of my node.js project and run the tests.
You need a nodejs project
Here is an example of a project that you can use:
To start the project tests just run the command
To enable continuous integration (the CI part) in your GitLab project, just add a
.gitlab-ci.yml file to the root of your project:
It is now that we are going to need a runner.
Project setup for the use of a runner
Go to the settings of your project and choose CI/CD, then scroll down the Runners settings section (by clicking on the Expand button) and you will thus obtain 2 important parameters:
- The GitLab instance url
- A token that will allow the runner to “send” informations to your GitLab instance
So keep this token, it will be useful for the definition of our runner.
⚠️ Then, very important, you need to define a “Personal Access Token” in the settings of your GitLab profile (and keep this second token somewhere).
Runner creation on Clever Cloud platform
To create my runner on Clever Cloud I will use a Dokerfile and a shell script file that I would deploy as an application on Clever Cloud.
So, create a
my-runnerdirectory with the following 2 files:
The Dockerfile will basically be used to install the gitlab-runner and nodejs with npm, then run the
What does go.sh do?
- The script retrieves the list of runners in progress with the GitLab API (hence the necessity of the access token) and retrieves the id of the runner by doing a search on the description of the runner
- Then we delete this entry (always with the API), if the list was empty it will generate an error (but it is not blocking)
- Note: I am doing this deletion because each time we restart our application, we will create a new runner record, so it is to avoid unnecessary accumulation
- Then the runner registers with the GitLab instance with the command
- Then it starts with the
- And finally I launch an http server because the platform Clever Cloud expects to launch a WebApp listening on 8080 (otherwise the platform will refuse to launch my application)
Let’s deploy the runner on Clever Cloud 🚀
- In the
my-runnerdirectory do a
git initthen a
git add .and finally a
git commit -m “add my runner”
- Then go to the Clever Cloud platform and create a Docker application with the following environment variables:
- The platform will provide you with a git url to add to your project to be able to deploy it (eg:
git remote add clever git+ssh://firstname.lastname@example.org/app_8fe8296c-bad4-4467-8aee-5bc32f4c83bf.git)
- So you can deploy:
git push -u clever master
- Wait a little
- Once your deployment is complete, you can return to your GitLab project
And in the settings you will see that your runner is well registered:
Start a pipeline
Now go to the CI/CD section of your repository, select the sub-section Pipelines:
Click on the “Run Pipeline” button. You will then be able to create a pipeline:
So click on the “Create Pipeline” button. This will trigger the creation of the pipeline and start it starting with the installation of the dependencies:
By clicking on the job you are interested in (a step of the pipeline) you get the details of what has been executed by the runner:
From now, whenever you “push” commits to
master branch, the pipeline will be triggered.
That’s it easy. Now you know how to deploy immutable GitLab runners on Clever Cloud 😃