Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 크롤링
- deploy
- Resource
- 웹 해킹
- CI
- CI/CD
- eks
- helm
- 웹 취약점
- Kubernetes
- 스크레이핑
- Grafana
- linkerd
- gitlab ci
- Monitoring
- scraping
- sonarqube
- GitLab
- Jenkins
- ECR
- gitlab cd
- docker
- argocd
- 모의해킹
- DevOps
- Prometheus
- CD
- Service Mesh
- opentelemetry
- Crawling
Archives
- Today
- Total
ㅡ.ㅡ
[Gitlab] CD/Helm 본문
이전에 생성한 gitlab-admin SA와 dtzar/helm-kubectl 이미지를 활용해 Gitlab에서 helm 을 사용하여 CD작업을 진행한다.
helm_charts
저장소에 아래 이미지와 같이 helm_charts 폴더에 생성할 리소스 파일을 준비해놓는다.
values.yaml에 정의된 값들이 templates에 잇는 K8S 리소스 파일에 매핑된다.
.gitlab-ci.yml
kubectl 명령어를 사용하기 위해 k8s api 서버에 인증할 값들을 CI/CD 변수로 등록한다.
배포시 변경되는값(이미지 파일의 태그 값과 환경 등)들을 values파일에 추가하여 배포를 진행한다.
before_script:
- export
# 스크립트에서 사용할 변수 설정
variables:
DOCKER_TLS_CERTDIR: ''
DOCKER_HOST: tcp://localhost:2375
ECR_TAG_LATEST: latest
ECR_TAG_COMMIT: $CI_COMMIT_SHORT_SHA
services:
- name: docker:19.03.13-dind
stages:
- deploy
deploy_helm:
stage: deploy
image: dtzar/helm-kubectl:3.6.0
environment:
name: 1388-1
script:
- ls -al
- kubectl config set-cluster k8s --server=$K8S_API
- kubectl config set clusters.k8s.certificate-authority-data $CERTIFICATE_AUTHORITY_DATA_B64
- kubectl config set-credentials gitlab --token=$USER_TOKEN
- kubectl config set-context default --cluster=k8s --user=gitlab
- kubectl config use-context default
- kubectl config view
- kubectl get nodes
- kubectl create secret docker-registry --dry-run=client $KUBE_NAMESPACE-secret
--docker-server=$ER
--docker-username=AWS
--docker-password=test -o yaml | kubectl apply -n $KUBE_NAMESPACE -f -
- |
cat >> ./helm_chart/values.yaml<< EOF
CI_PJ_PATH_SLUG : $CI_PROJECT_PATH_SLUG
CI_ENV_SLUG : $CI_ENVIRONMENT_SLUG
IMG : $ER:$ECR_TAG_LATEST
SECRET : $KUBE_NAMESPACE-secret
EOF
- cat ./helm_chart/values.yaml
- helm upgrade $CI_PROJECT_NAME ./helm_chart --install --values=./helm_chart/values.yaml --namespace $KUBE_NAMESPACE
다른 프로젝트에 저장된 helm chart를 사용시에는 CI 작업 후 git docker image를 통해 values파일의 태그값을 업데이트해주는 작업을 진행 후 CD를 진행하는 워크플로우를 구성하면 된다.
CI/CD 변수
gitlab-runner를 통해 작업 시 CI/CD 변수를 정의하여 파이프라인 작업 실행 시 사용할 수 있다.
변수값 추출 스크립트(kubectl 명령어 되는 환경에서 실행)
echo '[+] ENV K8S_API'
kubectl config view --raw -o=jsonpath='{.clusters[0].cluster.server}'
echo -e '\n\n'
echo '[+] ENV CERTIFICATE_AUTHORITY_DATA_B64'
kubectl config view --raw -o=jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 --decode
echo -e '\n\n'
echo '[+] ENV USER_TOKEN'
GITLAB_SECRET=$(kubectl -n kube-system get secret | grep gitlab-admin-token | awk '{print $1}')
GITLAB_TOKEN=$(kubectl -n kube-system get secret $GITLAB_SECRET -o jsonpath='{.data.token}' | base64 --decode)
echo $GITLAB_TOKEN
PipeLine
gitlab CI/CD pipeline 작업 내역을 보면 helm을 통해 실패없이 배포것을 확인할 수 있고
Deployments 환경쪽을 확인해보면 pod가 정상적으로 배포된것을 확인할 수 있다.
helm 명령어
확인 : helm ls -n 네임스페이스
삭제 : helm uninstall 이름 -n 네임스페이스
'WorkFlow' 카테고리의 다른 글
[Jenkins] Gitlab Repo 연동 (0) | 2021.09.28 |
---|---|
[Jenkins] Jenkins (0) | 2021.09.26 |
[Gitlab] CD/Kubectl (0) | 2021.09.25 |
[Gitlab] CI/ECR (3) | 2021.09.20 |
[Gitlab] CI/GitLab Container Registry (0) | 2021.09.20 |