공부하기싫어
article thumbnail

새로운 블로그를 찾아서

천천히 따라해보려고 함

https://ssunw.tistory.com/entry/CICD-EKS-%EC%97%90%EC%84%9C-Jenkins-ArgoCD-%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8-%EA%B5%AC%EC%84%B1-1

 

[CI/CD] EKS 에서 Jenkins, ArgoCD 를 활용한 파이프라인 구성

CI/CD 미니 프로젝트 목차 I. 과제 및 배경 소개 아키텍쳐 환경 구성 프로젝트 진행 일정 프로젝트 GitHub 주소 EKS와 K8S의 차이점 II. 구현 절차 1. EC2 인스턴스 구성 1-1. EC2 인스턴스에 부여 IAM 역할

ssunw.tistory.com

 

정리 깔끔하게 잘해놓으셧네

 

위 블로그에서는 docker hub를 사용했는데

ECR을 사용해볼까 하다가 그냥 그대로 따라할 예정

 

근데 불편하게 텍스트 복사를 아예 막아놓은거같다 ㅡㅡ

 

 

1. EC2 인스턴스 구성

기존 인스턴스 삭제하고 새로 하나 만들어줬다

IAM role 도 하나 할당해줬는데 AdministratorAccess 로 EKS 용 역할을 하나 만들어줌

보안그룹은 22랑 8080을 열어줬다

 

  • 패키지 설치

sudo hostname jenkins

sudo su - jenkins

 

aws cli

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

aws configure

내꺼 access id 입력해주고 서울리전에 output은 json 으로 해줬다

 

 

aws-iam-authentication 설치

curl -o aws-iam-authenticator https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/aws-iam-authenticator
chmod +x ./aws-iam-authenticator
mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc

aws-iam-authenticator help

aws 공부할때 iam 인증은 콘솔에서 하는게 안전하다 뭐 그랬던것같은데

일단 진행

 

kubectl 1.22.8 설치

kubectl

sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg     

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update

apt-cache madison kubectl | grep 1.22.8

sudo apt-get install kubectl=1.22.8-00 -y

sudo apt-mark hold kubectl

 

eksctl 설치

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version

eksctl

eksctl 버전 확인

 

 

Jenkins 설치

sudo apt update

sudo apt-get install default-jdk -y
java -version

sudo apt install maven -y
mvn --version

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update
sudo apt install jenkins -y

sudo cat /var/lib/jenkins/secrets/initialAdminPassword # 젠킨스 접속시 사용되는 초기 암호 확인

 

 

Docker 설치

sudo apt install docker.io -y
sudo usermod -aG docker $USER
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker

sudo usermod -aG docker jenkins
sudo service jenkins restart
sudo systemctl daemon-reload
sudo service docker stop
sudo service docker start

 

Helm CLI 설치

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

 

ArgoCD CLI 설치

wget https://github.com/argoproj/argo-cd/releases/download/v2.2.5/argocd-linux-amd64 -O argocd
chmod +x argocd
sudo mv argocd /usr/local/bin

 

aws-load-balancer-controller

여긴 나중에 해야하는듯

 

 

2. Repository의 manifest로 eksctl 클러스터 생성

 

ec2 인스턴스 공개 키 git 계정에 등록

 

 

그 다음에 eks 생성하기 파트가 있는데 나는 그냥 fargate 를 사용하는 eks 를 따로 aws 에 만들어줬다

https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-cluster-connection/

 

Amazon EKS 클러스터에 연결

닫기 Saketh의 동영상을 보고 자세히 알아보기(4:03)

aws.amazon.com

 

연결된듯 하다

 

 

 

3. CI - Jenkins

이후 Jenkins 가서 plugin 설치해주고 깃허브랑 도커허브 credentails 등록 해주고

 

블로그에선 slack 등록까지 있었는데 재꼈다

 

이후 파이프라인 만들어줬다

 

이제 빌드 하는데

 

여기서 오류 엄청 나다가

 

빌드 단계 오류

Jenkins 파일을 좀 고쳐서 클론 후 빌드 하는 단계까지 성공했다

Dockerfile 이 없다고 나오는데 내가 깃허브에 올릴때 Dockerfile.yml 로 올려서 그런듯

 

build

image push 까지 됬고

 

hub.docker

hub.docker 에서 확인된 모습

 

마지막 단계는 실행이 안됬는데

 

 stage('K8S Manifest Update') {
      steps {
        // git 계정 로그인, 해당 레포지토리의 main 브랜치에서 클론
        git credentialsId: githubCredential,
            url: 'https://github.com/cyaninn-entj/mini-cicd-eks-project.git',
            branch: 'main'  

        // 이미지 태그 변경 후 메인 브랜치에 푸시
        sh "git config --global user.email ${gitEmail}"
        sh "git config --global user.name ${gitName}"
        sh "sed -i 's/tomcat:.*/tomcat:${currentBuild.number}/g' deploy/production.yaml"
        sh "git add ."
        sh "git commit -m 'fix:${dockerHubRegistry} ${currentBuild.number} image versioning'"
        sh "git branch -M main"
        sh "git remote remove origin"
        sh "git remote add origin git@github.com:cyaninn-entj/mini-cicd-eks-project.git"
        sh "git push -u origin main"
      }
      post {
        failure {
          echo 'K8S Manifest Update failure'
          //slackSend (color: '#FF0000', message: "FAILED: K8S Manifest Update '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
        }
        success {
          echo 'K8s Manifest Update success'
          //slackSend (color: '#0AC9FF', message: "SUCCESS: K8S Manifest Update '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
        }
      }
    }

이런 코드인데

git config --global user.email sounddevice3@gmail.com

여기서부터 

error: could not lock config file /home/jenkins/.gitconfig: Permission denied

이렇게 뜨면서 안된다 ㅇㅅㅇ

 

음.. deploy 안에 production.yaml 로 app 버전 변경 사항을 argoCD 에서 체크하는것 같은데

 

이건 내일 해보자