새로운 블로그를 찾아서
천천히 따라해보려고 함
정리 깔끔하게 잘해놓으셧네
위 블로그에서는 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 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 설치
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 버전 확인
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/
연결된듯 하다
3. CI - Jenkins
이후 Jenkins 가서 plugin 설치해주고 깃허브랑 도커허브 credentails 등록 해주고
블로그에선 slack 등록까지 있었는데 재꼈다
이후 파이프라인 만들어줬다
이제 빌드 하는데
여기서 오류 엄청 나다가
Jenkins 파일을 좀 고쳐서 클론 후 빌드 하는 단계까지 성공했다
Dockerfile 이 없다고 나오는데 내가 깃허브에 올릴때 Dockerfile.yml 로 올려서 그런듯
image push 까지 됬고
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 에서 체크하는것 같은데
이건 내일 해보자
'Kubernetes > CICD' 카테고리의 다른 글
Jenkins + EKS 구성해보기 6 (테스트 성공) (0) | 2022.11.17 |
---|---|
Jenkins + EKS 구성해보기 5 (참고) (0) | 2022.11.17 |
Jenkins + ArgoCD + EKS 구성해보기 4 (실패) (0) | 2022.11.16 |
Jenkins + ArgoCD + EKS 구성해보기 3 (실패) (0) | 2022.11.15 |
Jenkins + ArgoCD + EKS 구성해보기 1 (실패) (0) | 2022.11.13 |