Jenkins is an open source automation server written in Java. Jenkins helps to automate the non-human part of the software development process, with continuous integration and facilitating technical aspects of continuous delivery. It is a server-based system that runs in servlet containers such as Apache Tomcat. Below architecture shows continuous integration based in GCP.

GCP-Jenkins on k8s

A logical isolation between components is made using the Namespace primitive of Kubernetes. In this namespace we isolate the Jenkins master and its slaves from the Production and Staging environments that it is deploying to.

Jenkins validates the software by running the necessary unit and integration tests. Once those pass it sends and immutable artifact, a docker image, to secure and scalable Google Container Registry. Once it is stored here the image can be deployed to both staging and production.

A namespace is a declarative region that provides a scope to the identifiers (the names of types, functions, variables, etc) inside it. Namespaces are used to organize code into logical groups and to prevent name collisions that can occur especially when your code base includes multiple libraries