
Let's check it out!
GitLab CI/CD
•
Create .gitlab-ci.yml at the root of project
• this is the driver file that co-ordinates stages: • Build / Lint / Deploy |
gitlab-ci.yml

Variables
•
Generic Variables used in all environments and environment specific variables to build software
• Rules that can be used to automate deployments to "lower" environments vs. Manual deployments • YAML that builds the Docker image and push image to container registry of the developer's choice • YAML that has instructions on how to deploy latest built Docker image to Kubernetes cluster |
environments.yml | deployment-rules.yml |
![]() |
![]() |
Artefacts
•
YAML files that contain Helm chart artefacts used like Deployment and Service YAML
• YAML files that contain Values to be injected including environment specific variables |
deployment.yaml | service.yaml |
![]() |
![]() |
NOTE: Hardcoded non-sensitive variables stored in Values YAML files including all environment variables:

Whereas sensitive information is stored in Kubernetes secret resources and injected at deployment time.
GitFlow SDLC
Development
•
GitLab source code repo has main branch for all the Prod deployments
• GitLab source code repo has develop branch as the integration branch • develop branch for feature development and deployment to DEV / UAT • GitFlow: ensure develop branch is stable: cut feature branch off develop |
Deployment
•
Submit Pull Request | Merge to develop branch | Trigger build
• Auto-deploy to DEV | Manual deploy to UAT [when QA ready] |
Testing
•
Feature completed on DEV / preliminary testing on UAT cut release branch off develop
• Deploy release branch to UAT - complete feature testing and regression testing • Any bugs on UAT in release candidate then cut bugfix branch off release branch • Fix bug | Submit Pull Request | Merge to release branch | Re-deploy to UAT [manually] |
Release
•
Once release candidate is stable / all bugs fixed: then submit Pull Request release branch to main
• This action will build pipeline but NOT deploy!! Manually deploy to Prod when stakeholders agree!! |

Alignment
•
Finally, after deploy to Prod from main submit PR from main to develop for alignment
• Hotfixes available similar to bugfix | Cut hotfix branch from main and submit PR deploy to Prod • After hotfix merged to main and deployed to Prod submit PR from main to develop for alignment |
Kubernetes Management: Rancher
Q. What is Rancher?
Open source platform that simplifies the deployment, scaling and management of your Kubernetes clusters:
•
Kubernetes: open source orchestration platform that automates management of containerized apps
• Rancher: open source container platform built on top of Kubernetes to simplify cluster management • Download Kubernetes cluster configuration kubeconfig files from Rancher to connect to your clusters |
Kubernetes kubeconfig
•
kubeconfig file is YAML configuration used to connect to Kubernetes clusters, users and contexts
• Download DEV kubeconfig file from Rancher to localhost ~/.kube/dev-config • Download UAT kubeconfig file from Rancher to localhost ~/.kube/uat-config |
SETUP
# Setup the global KUBECONFIG environment variable export KUBECONFIG=~/.kube/config:~/.kube/dev-config:~/.kube/uat-config # Flatten multiple kubeconfig files into one "master" kubeconfig file kubectl config view --flatten > one-config.yaml # Rename accordingly mv one-config.yaml ~/.kube/config # Confirm cluster configuration update kubectl config get-contexts |
Deployment Verification
Monitor cluster - What is kubectl?
•
Command line tool run commands against Kubernetes clusters - communicate using Kubernetes API
• Post-deployment use kubectl commands to verify the health of cluster ensuring all pods re-spawned |
TEST Deployment
Finally, test endpoint(s) via curl or in Postman:
# Test endpoint kubectl port-forward service/flask-api-service 8080:80 curl http://localhost:8080/api/v1 --header "Content-Type: application/json" # RESPONSE {"message": "Hello World (Python)!"} |
CI/CD Pipeline Benefits
Four Benefits of CI/CD - successful pipeline strategy helps your team deliver higher quality Software faster!
•
Increased speed of innovation + automation = deployments that are faster and more regular
• Code in Production adds immediate value instead of sat waiting in a deployment queue! • Engineers become more productive instead of focus on boring / mundane manual tasks • Higher code quality due to continuous automated build, test, deploy rinse + repeat cycles J |
Summary
To summarize, we have now highlighted the back story transitioning from the 1990s to modern day CI/CD and outlined the integration process with GitFlow SDLC to demonstrate Kubernetes CI/CD pipeline benefits!