home..

CICD 파이프라인 생성하기

overview moonwalk

CICD 파이프라인

gitlab 에 gitlab runner를 이용한 CI

argocd를 이용한 CD 과정을 담았다.

gitlab runner 등록하기

gitlab runner는 일반적으로 프로젝트단위로 등록을 진행하며

Untitled

프로젝트 → Settings → CI/CD 메뉴 클릭

CI/CD 메뉴에서 Runner 배너를 expand 하고 Project runners에 … 을 클릭해 token 획득

Untitled

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

Untitled

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

Untitled

GITLAB_TOKEN은 hsp 코드 배포용 프로젝트인 hsp-argocd 프로젝트에서 access token을 발급받는다.

hsp-argocd 프로젝트에서 access token 발급받기

Untitled

ARGOCD 등록하기

argocd에서는 세개의 과정을 거친다

  1. argocd project 생성
  2. repositories 등록
  3. application 등록

argocd project 생성하기

general : 설정할 이름

source repositories : repo 위치 (~/.git 형태)

destinations : https://kubernetes.default.svc

project를 등록하면 application 등록이 가능해진다.

repositories 등록하기

connect repo를 눌러 새로운 repo를 등록한다.

Untitled

연결방식 : 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가 생성된다.

Untitled

auto sync로 등록해놨기때문에 3분 주기로 manifest git와 확인하면서 업데이트를 한다.

업데이트가 생기면 새로운 image의 pod를 생성하고, 생성이 완료되면 기존 image의 replicaset을 0으로 줄여 보관한다. 추후에 문제가 발생했을때, rollout 할 수 있다.

© 2024 mont kim   •  Powered by Soopr   •  Theme  Moonwalk