Jenkins 환경 구성
✔ Docker 설치
💬 Docker Image를 통해 Jenkins을 설치 및 실행하기 위해 진행
1.Docker 설치
sudo apt-get update
sudo wget -qO- https://get.docker.com/ | sh
2.Docker 그룹에 현재 계정 추가
sudo usermod -aG docker ${USER}
sudo systemctl restart docker
✔ Jenkins 설치
💬 Jenkins과 Java 17이 설치된 환경 이미지를 내려받고 실행. 추가적으로 서버와 가상서버의 포트 및 저장공간을 연결.
1.Java 17 환경을 가진 Jenkins 이미지 내려받기
docker pull jenkins/jenkins:lts-jdk17
2.Jenkins 이미지 실행
docker run -d -p 8080:8080 -p 50000:50000 -v /jenkins:/var/jenkins -v /home/ubuntu/.ssh:/root/.ssh -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -u root jenkins/jenkins:lts-jdk17
✔ Jenkins 기본 설정
💬 Jenkins을 브라우저 환경에서 실행하기 위해서 초기 설정 과정이 필요.
1.Jenkins 브라우저로 접속
http://{도메인 주소}:8080/
2.서버에서 Jenkins 설정 비밀번호 얻기
docker logs jenkins
3.Install suggested pulgins로 플러그인 설치
✔ Git Repostory 권한 설정
💬 Git에 있는 코드를 Clone 해오고 Web Hook 기능을 사용하기 위한 권한 설정
1.권한 설정 화면으로 이동
Manage Jenkins -> Credentials -> Store scoped to Jenkins -> (global) -> Add Credentials
2.권한 등록
Kind : Username with password
Useranme : Git ID
Password : Git Personal Token
ID : github(임의의 값)
✔ Docker hub 설정
💬 빌드한 애플리케이션을 이미지로 만들어 Spring Boot Server EC2로 보내기 위한 설정
1.Plugin 설치로 이동
Manage Jenkins -> Plugins -> Availavle plugins
2.Docker 관련 Plugin 설치
Docker, Docker Pipeline
3.권한 설정 화면으로 이동
Manage Jenkins -> Credentials -> Store scoped to Jenkins -> (global) -> Add Credentials
4.권한 등록
Kind : Username with password
Useranme : Docker hub Username
Password : Docker hub Password
ID : dockerhub(임의의 값)
5.Jenkins EC2에 접속
ssh -i "fileName.pem" IP
6.Docker 컨테이너 Jenkins의 bash 실행
docker exec -it jenkins bash
7.Jenkins 컨테이너에 Docker 설치
✔ Spring Boot Server EC2 ssh 연결 설정
💬 Spring Boot Server에 ssh 명령어(애플리케이션 시작, 종료 등)를 날리기 위한 설정
3.권한 설정 화면으로 이동
Manage Jenkins -> Credentials -> Store scoped to Jenkins -> (global) -> Add Credentials
4.권한 등록
Kind : SSH Username with private key
ID : ssh(임의의 값)
Username : Server User Name
Private Key : AWS fileName.pem file content
✔ Pipeline 생성
💬 실행해야 하는 명령어 작성 및 자동화를 위한 설정
1.General 설정
GitHub Project Check
Project url : Git Http URL
2.Build Triggers 설정
GitHub hook trigger for GITcm polling Check
3.Pipeline 설정
Definition : Pipline script from SCM Select
Repostiroy URL : Git Http URL
Credentials : github Credenitals
Branch Specifier : */main
4.저장 완료
이슈
✔ Jenkins에서 github clone을 못하는 문제
💢 Permission Deined가 뜨면서 clone을 계속 해오지 못함
✅ Jenkins Server EC2에서 github repository url을 know_hosts에 추가하는 방식으로 문제 해결
➡ git ls-remote -h git@github.com:mini-project-evey-team/four-cuts-backend.git HEAD
✔ Jenkins에서 Docker Container 종료 못하는 문제
💢 Docker에서 명령어를 날리면 정상적으로 동작하지만 1 값이 반환되어 실행 실패로 뜨는 문제
✅ 반환 값 1을 정상 동작인 0으로 바꿔주기 위해 [ $? = 1 ]을 추가. $? 는 exits stauts를 나타냄.
➡ docker rm -fv four-cut || [ $? = 1 ]
참고
[DevOps] Jenkins, Docker로 Spring Boot CI/CD 구축하기
CI/CD 구조 Jenkins Server : AWS EC2 Ubuntu 18.04 Spring Boot Server : AWS EC2 Ubuntu 18.04 Github Repository Docker Hub Repository 사전 준비 Jenkins Serve
velog.io
Exit code of 1 from SSH command
Why would the following return a 1: ssh -tt server_name "sudo grep 'something' /path/to/file || [ $? = 1 ]" The command in double quotes when run directly on server_name returns 0. Why is the ssh
superuser.com
생각
블로그를 따라서 작성해 봤는데도 쉽지 않았다. 우리 환경과 다른 것도 있었고 에러들도 중강중간 많이 일어났기 때문이다. 전부 기록해두지 못해서 아쉽기는 하지만 그런 에러들 해결하고 CI/CD가 정상적으로 돌아가는 것을 보고 좋았다. 에러를 해결하면서 배우는 것이 많았기 때문이다.
'개발일지 > TIL' 카테고리의 다른 글
[230718] [미니] 모여봐요 인생네컷 HTTPS 설정 (0) | 2023.07.18 |
---|---|
[230717] [미니] 모여봐요 인생네컷 CI/CD 구성 (3) (0) | 2023.07.17 |
[230715] [미니] 모여봐요 인생네컷 CI/CD 구성 (1) (0) | 2023.07.15 |
[230714] [미니] 모여봐요 인생네컷 S.A (0) | 2023.07.14 |
[230713] Record 적용해보기 (0) | 2023.07.13 |