Thursday, June 11, 2026
DevOps Git GitLab Helm K3s Kubernetes

Belajar GitLab Part 6-Use Helm

kali ini kita akan coba menggunakan Helm

Flow Setelah Full Helm

Developer Push
↓
GitLab CI Build
↓
Push Registry
↓
Helm Deploy
↓
Kubernetes
↓
Rollback 1 Command

Install Helm

Di kube1 atau di server Runner:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Verifikasi

helm version

1. Hapus Resource Lama

Misal namespace production:

kubectl delete deployment nginx-app -n production

kubectl delete svc nginx-service -n production

kubectl delete namespace production

helm uninstall nginx-prod

helm uninstall nginx-dev

namespace development :

kubectl delete deployment nginx-app -n development

kubectl delete svc nginx-service -n development

kubectl delete namespace development

2. Pastikan Bersih

kubectl get all -n production

kubectl get all -n development

3. Cek Registry

kubectl get secret -n development

kubectl get secret -n production

harus ada gitlab – registry

root@kube1:~# kubectl get secret -n development
NAME                              TYPE                             DATA   AGE
gitlab-registry                   kubernetes.io/dockerconfigjson   1      19m
sh.helm.release.v1.nginx-dev.v1   helm.sh/release.v1               1      40m

kalau hilang terhapus . tambahkan secret nya

kubectl create secret docker-registry gitlab-registry \
--docker-server=registry.gitlab.com \
--docker-username=USERNAME_GITLAB \
--docker-password=TOKEN_GITLAB \
--docker-email=EMAIL \
-n development

Struktur Project Baru

belajar-gitlab/
├── .gitlab-ci.yml
├── Dockerfile
├── index.html

└── helm/
└── nginx-app/
├── Chart.yaml
├── values.yaml
├── values-dev.yaml
├── values-prod.yaml

└── templates/
├── deployment.yaml
└── service.yaml

Bisa copy code dari -> https://github.com/kyuby13/belajar-gitlab-helm

GitLab CI Versi Helm

stages:
  - build
  - deploy

variables:
  IMAGE_NAME: registry.gitlab.com/project7112620/belajar-gitlab/nginx-app

# =========================
# BUILD
# =========================

build:
  image: docker:latest

  stage: build

  tags:
    - main-runner

  services:
    - docker:dind

  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""

  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com

    - docker build -t $IMAGE_NAME:$CI_COMMIT_SHORT_SHA .

    - docker push $IMAGE_NAME:$CI_COMMIT_SHORT_SHA

# =========================
# DEVELOPMENT
# =========================

deploy-dev:
  image:
    name: alpine/helm:latest
    entrypoint: [""]

  stage: deploy

  environment:
    name: development
    url: http://192.168.10.15:30082

  only:
    - develop

  tags:
    - main-runner

  variables:
    KUBECONFIG: /kubeconfig

  script:
    - >
       helm upgrade --install nginx-dev ./helm/nginx-app 
       --namespace development
       --create-namespace
       -f ./helm/nginx-app/values-dev.yaml 
       --set image.tag=$CI_COMMIT_SHORT_SHA

# =========================
# PRODUCTION
# =========================

deploy-prod:
  image:
    name: alpine/helm:latest
    entrypoint: [""]

  stage: deploy

  environment:
    name: production
    url: http://192.168.10.15:30081

  only:
    - main

  tags:
    - main-runner

  variables:
    KUBECONFIG: /kubeconfig

  script:
    - >
      helm upgrade --install nginx-prod ./helm/nginx-app 
      --namespace production
      --create-namespace
      -f ./helm/nginx-app/values-prod.yaml 
      --set image.tag=$CI_COMMIT_SHORT_SHA

Chart.yaml

Identitas Helm chart.

apiVersion: v2

name: nginx-app

description: Nginx Application Helm Chart

type: application

version: 0.1.0

appVersion: "1.0"

values.yaml

Default value.

appName: nginx-app

replicaCount: 1

namespace: default

image:
repository: registry.gitlab.com/project7112620/belajar-gitlab/nginx-app

tag: latest

service:
type: NodePort

port: 80

nodePort: 30080

values-dev.yaml

Khusus development.

namespace: development

replicaCount: 1

service:
nodePort: 30081

values-prod.yaml

Khusus production.

namespace: production

replicaCount: 3

service:
nodePort: 30080

templates/deployment.yaml

Template deployment.

apiVersion: apps/v1

kind: Deployment

metadata:
name: {{ .Values.appName }}

namespace: {{ .Values.namespace }}

spec:
replicas: {{ .Values.replicaCount }}

selector:
matchLabels:
app: {{ .Values.appName }}

template:
metadata:
labels:
app: {{ .Values.appName }}

spec:
imagePullSecrets:
- name: gitlab-registry

containers:
- name: {{ .Values.appName }}

image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

imagePullPolicy: Always

ports:
- containerPort: 80

templates/service.yaml

apiVersion: v1

kind: Service

metadata:
name: nginx-service

namespace: {{ .Values.namespace }}

spec:
type: {{ .Values.service.type }}

selector:
app: {{ .Values.appName }}

ports:
- port: {{ .Values.service.port }}

targetPort: 80

nodePort: {{ .Values.service.nodePort }}

Cara Deploy Manual


Development

helm upgrade --install nginx-dev ./helm/nginx-app \
-f ./helm/nginx-app/values-dev.yaml

Production

helm upgrade --install nginx-prod ./helm/nginx-app \
-f ./helm/nginx-app/values-prod.yaml

Cara RoleBack

kubectl get pods -A
helm history nginx-dev -n development

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue May 19 10:11:01 2026 superseded nginx-app-0.1.0 1.0 Install complete
2 Tue May 19 10:18:21 2026 superseded nginx-app-0.1.0 1.0 Upgrade complete
3 Tue May 19 10:35:05 2026 superseded nginx-app-0.1.0 1.0 Rollback to 1
4 Tue May 19 10:36:02 2026 deployed nginx-app-0.1.0 1.0 Rollback to 2

helm rollback nginx-dev 1 -n development

Verifikasi Pod

kubectl get pods -n development

Verifikasi Image

kubectl describe deployment nginx-app -n development

lihat:

Image:

harus berubah ke image tag revision lama.


Kalau Mau Rollback Production

helm rollback nginx-prod 1 -n production

Cara Cek Resource Dikelola Helm

helm list -A

Cek Manifest Helm

helm get manifest nginx-prod -n production

Kelebihan Besar Helm

Nanti kamu bisa:


Lihat Release

helm list -A

Lihat History

helm history nginx-prod -n production

Rollback

helm rollback nginx-prod 1 -n production

Upgrade

helm upgrade

Uninstall

helm uninstall nginx-prod -n production

Helm Sangat Penting Di Kubernetes Modern

Karena hampir semua install production:

helm install prometheus
helm install grafana
helm install argocd
helm install loki

Similar Posts