CICD 파이프라인 생성하기
mont kim / June 2023 (310 Words, 2 Minutes)
CICD 파이프라인
gitlab 에 gitlab runner를 이용한 CI
argocd를 이용한 CD 과정을 담았다.
gitlab runner 등록하기
gitlab runner는 일반적으로 프로젝트단위로 등록을 진행하며
프로젝트 → Settings → CI/CD 메뉴 클릭
CI/CD 메뉴에서 Runner 배너를 expand 하고 Project runners에 … 을 클릭해 token 획득
helm 을 이용해 gitlab runner 등록
cvalues.yaml
gitlabUrl: http://gitlab.mont-kim.com
runnerRegistrationToken: "@@@@@@@@"
## For RBAC support:
rbac:
create: true
clusterWideAccess: true
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "create", "delete"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]
- apiGroups: [""]
resources: ["pods/attach"]
verbs: ["create"]
- apiGroups: [""]
resources: ["secrets", "configmaps"]
verbs: ["create", "update", "delete"]
- apiGroups: [""]
resources: ["services"]
verbs: ["create"]
runners:
privileged: true
config: |
[[runners]]
[runners.kubernetes]
image = "gitlab/gitlab-runner:15.7.1"
helper_cpu_limit = "4"
[[runners.kubernetes.volumes.empty_dir]]
name = "docker-certs"
mount_path = "/certs/client"
medium = "Memory"
[[runners.kubernetes.volumes.empty_dir]]
name = "dind-storage"
mount_path = "/var/lib/docker"
[[runners.kubernetes.volumes.host_path]]
name = "hostpath-modules"
mount_path = "/lib/modules"
read_only = true
host_path = "/lib/modules"
tags: "dind"
securityContext:
allowPrivilegeEscalation: true
readOnlyRootFilesystem: false
runAsNonRoot: false
privileged: true
capabilities:
add: ["ALL"]
runner 배포하기
helm upgrade --install git-hsp-runner gitlab/gitlab-runner -n gitlab-managed-apps -f cvalues.yaml
CI/CD 메뉴를 새로고침하면 등록된 Runner 가 보인다.
dind 라는 태그로 등록을 진행했으므로 ci.yml 파일을 작성할때도 위와 같이 태그를 동일하게 지정하면 된다.
CI PIPELINE 제작
ci pipleline은 git에 변경점이 발생했을때, 트리거되어 그 이후에 실행될 작업들을 설정하는 구간이다.
ci yaml에 사용할 변수들을 등록해준다.
CI_REGISTRY : 이미지 레지스트리 주소
CI_REGISTRY_IMAGE : 이미지 이름 CI_REGISTRY_USER : 레지스트리 계정이름
CI_REGISTRY_PASSWORD: 레지스트리 계정 비밀번호 GITLAB_TOKEN : 배포 프로젝트에 수정할 권한을 가진 acess token
GITLAB_TOKEN은 hsp 코드 배포용 프로젝트인 hsp-argocd 프로젝트에서 access token을 발급받는다.
hsp-argocd 프로젝트에서 access token 발급받기
ARGOCD 등록하기
argocd에서는 세개의 과정을 거친다
- argocd project 생성
- repositories 등록
- application 등록
argocd project 생성하기
general : 설정할 이름
source repositories : repo 위치 (~/.git 형태)
destinations : https://kubernetes.default.svc
project를 등록하면 application 등록이 가능해진다.
repositories 등록하기
connect repo를 눌러 새로운 repo를 등록한다.
연결방식 : via https
type : git
project : 위에 생성한 project 선택
repository url : source repositories 위치 입력
user name : git 계정이름
password : git / project에서 발급받은 access token 입력
앞서 생성한 project와
설정한 계정정보가 올바르게 입력되었다면 등록후 connection status가 successful로 뜬다.
application 등록하기
general 항목
application name : 설정할 이름
project name : 위에 생성한 project name 선택
sync policy : automatic
source 항목
repository url : project에서 등록한 source repositories 중 선택
Path : 해당 repo 위치에서 kubernetes manifest가 존재하는 위치 (최상위 디렉토리에 있으면 .)
desination 항목
cluster url : project에서 설정한 local url 설정
(argocd를 배포한 클러스터에서 사용할것이라면 https://kubernetes.default.svc)
등록을 진행하면 kubernetes manifest가 등록되어있는 workflow가 생성된다.
auto sync로 등록해놨기때문에 3분 주기로 manifest git와 확인하면서 업데이트를 한다.
업데이트가 생기면 새로운 image의 pod를 생성하고, 생성이 완료되면 기존 image의 replicaset을 0으로 줄여 보관한다. 추후에 문제가 발생했을때, rollout 할 수 있다.