본문 바로가기
DevOps

CI/CD (Argo CD)

by 이강복 2023. 1. 31.

 

Argo CD 설치

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl get all -n argocd
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

# 암호 찾기
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

 

Repositories 설정

 

New Application

  • Application Name : nginx를 배포할거니까 간단하게 nginx라고 지정
  • Project : ArgoCD에서 애플리케이션을 구분하고 관리하기 위한 논리적인 그룹.
  • SYNC POLICY : Manual 과 Automatic 중에 선택하며, Git의 환경과 비교하는 것을 수동으로 할지 자동으로 할지 선택.
  • Prune Resources : 변경 사항에 따라 리소스를 업데이트할 때, 기존의 리소스를 삭제하고 새로운 리소스를 생성
  • Self Heal : ArgoCD가 지속적으로 Git 레포지토리의 설정값과 싱크를 맞추려고 함

  • Repository URL : 사용할 레포지토리 URL , 이전에 연동했던 레포지토리가 등록될 것이다.
  • Revision : git의 어떤 Revision (HEAD , Master branch 등)을 바라볼지 결정
  • Path : Git에서 어떤 저장소의 어떤 디렉토리를 바라볼지 결정 (매니패스트 파일이 있는 곳)
  • Cluster URL : Kubernetes의 어느 클러스터에 배포할지 결정
  • Namespace : Kubernetes 클러스터의 어느 Namespace에 배포할지 결정

 

 

Jenkins 서버

pipeline {
    agent any
    
    environment {
        GIT_URL = "https://github.com/kangbock/jenkins"
    }

    tools {
        nodejs "nodejs-tool"
    }

    stages {
        stage('Pull') {
            steps {
                git url: "${GIT_URL}", branch: "main", poll: true, changelog: true
            }
        }

        stage('Build') {
            steps {
                sh 'docker build -t kangbock/nginx:v${BUILD_NUMBER} ./nginx/'
                sh 'docker build -t kangbock/nodejs:v${BUILD_NUMBER} ./nodejs/'
            }
        }
        
        stage('Push') {
            steps{
                sh 'docker push kangbock/nginx:v${BUILD_NUMBER}'
                sh 'docker push kangbock/nodejs:v${BUILD_NUMBER}'
            }
        }

        stage('Finish') {
            steps{
                sh 'docker images -qf dangling=true | xargs -I{} docker rmi {}'
                sh 'docker image prune -af'
            }
        }
    }
}

 

이 방식의 문제점 - Web 코드와 Manifest 파일을 Git Repository로 분리시켜야 하며 각각의 Repository에 따로 Push 해야함

(Docker Hub에 Docker Image가 Push된 후 최신화된 Tag 값을 Manifest 파일에 적용시키고 Push)

 

다른 방안을 찾아볼 예정

'DevOps' 카테고리의 다른 글

Harbor  (1) 2023.05.23
ArgoCD Image Updater (현재 Beta 버전)  (0) 2023.02.24
Helm chart / kustomize  (0) 2023.02.24
Terraform (Azure)  (0) 2023.01.18
CI/CD (Jenkins)  (0) 2023.01.18