A simple gitlab-ci pipeline, for a java project built with gradle, dockerized and pushed to a Google Container Registry
I have been working on a small personal project during these days (a silly slack bot). Usually I try to mix and match technologies that I am using at work, with stuff that I really enjoy, and I have a very strong opinion. So I get to improve on stuff that I don't necessarily enjoy using day to day :P with stuff that I really like.
In this particular small post I want just to share a dead simple GitlabCI pipeline for a small service based on Java, built with gradle, dockerized and then pushed the image to a private registry on Google. You may ask why GCR, it's part of my small project.
So we have
- Java web api service, based on JDK 11
- Built with Gradle 6.3
- Has to be Dockerized and pushed to a private registry on Google Cloud.
- It is hosted on gitlab, and I am using Gitlab-CI (free).
Project Structure
You can assume the following standard structure. Java sources, gradle build script, a Dockerfile on the root of the folder + gitlab-ci.yml definition. I am not going to elaborate on the build script, code etc.
Pre-req
- You need a Google Cloud account, and a new project configured (in this example the name of the project is called javapapo)
- You need to enable the Docker Registry on Google Cloud for your project ( Enable the Container Registry API.) see here.
- In order to be able to push to your private docker registry from a service like Gitlab, you need to a way to authenticate. There several options out there, but it seems that most of the people do prefer to create a specific _SERVICE_ACCOUNT', and then get a JSON token. See here
Pipeline
The source of the pipeline can be found on this Gitlab Snippet (it's public. I have added inline comments. Adding the service account JSON as a Base64 variable on the CI/CD settings of the project
References:
- https://gist.github.com/foklepoint/2f9087375830068ec032ef326d93f423
- https://github.com/JanMikes/gitlab-ci-push-to-gcr
- https://forum.gitlab.com/t/gitlab-ci-docker-template-credentials/23373
- https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#making-docker-in-docker-builds-faster-with-docker-layer-caching
- https://stackoverflow.com/questions/47280922/role-of-docker-in-docker-dind-service-in-gitlab-ci
- https://medium.com/@gaforres/publishing-google-cloud-container-registry-images-from-gitlab-ci-23c45356ff0e