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 |