일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CICD
- 시계열디비
- Docker
- 정처기
- 서버
- 정처기필기
- 롬복사용시주의할점
- API
- 어노테이션
- 정처기공부
- 정보처리기사
- controller
- 빌드스크립트
- 롬북
- Java8
- 자바
- 롬복
- 완전탐색알고리즘
- 알고리즘
- PULL방식아키텍쳐
- spring
- 생성자
- aws
- 정보처리기사필기
- git
- java
- 빌드자동화도구
- Groovy문법
- 프로그래머스
- 무중단배포
- Today
- Total
우당탕탕 개발일지
Jenkins(젠킨스), GitLab ↔ Jenkins ↔ EC2 연동하여 CI/CD 구축 본문
🔍 Jenkins(젠킨스)
소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴 = CI (Continuous Integration)
젠킨스는 서브버전, Git 과 같은 버전 관리시스템과 연동하여 소스의 커밋을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가 작동되도록 설정할 수 있다.
✅ 설치조건
최소 하드웨어 요구 사항
- 256MB RAM
- 1GB 드라이브 공간(Jenkins를 Docker로 실행하는 경우 최소 10GB 권장)
📌 GitLab 설정
1. Access Tokens 발급
프로젝트 → Settings → Access Tokens → 화면에 나온대로 입력, 체크 → Create project access token
( access token은 한번만 볼수있기 때문에 미리 저장해두기 )
📌 Jenkins 설정
2. 젠킨스 컨테이너 띄우기( 젠킨스 port 9000 사용)
docker run -d --name jenkins -p 9000:8080 jenkins/jenkins:jdk17
3. 젠킨스 URL 로 들어가서 설정하기
4. 젠킨스 초기 password 확인 후 입력
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
5. 설치 화면에서 Install suggested plugins 눌러 설치
6. 젠킨스 계정 생성 ( id/pw 찾기 없기 때문에 잘 저장 해놓기 )
📌 Jenkins ↔ GitLab 연동
7. GitLab 플러그인 설치
Jenkins 관리 → 플러그인 관리 → Available plugins → 🔍 gitlab → gitlab 체크하고 → Install without restart
8. GitLab Credentials 추가
Jenkins 관리 -> Manage Credentials -> Stores scoped to Jenkins -> Add credentials
Kind : GitLab API token
Scope : Global
API token : [발급 받은 gitlab token]
9. 8에서 추가한 Credentials 설정
Jenkins 관리 → 시스템 설정 → Gitlab
Connection name : [원하는 connection name]
Gitlab host URL: [깃랩이 설치된 주소]
Credentials: [앞서 생성한 GitLab API token]
10. 새로운 Item 생성
새로운 Item → Enter an item name → 원하는 프로젝트 이름 → Freestyle project → OK
11. Webhook 설정(젠킨스)
소스 코드 관리 → Git 체크 → Repository URL : [GitLab 프로젝트 HTTP URL 입력] → Branch Speciter : */main 으로 수정( 기본 */master 임 ) → +Add 클릭
Kind: Username with password
Scope: Global
Username: [깃랩 아이디]
Password: [깃랩 비밀번호]
12. Webhook 설정 시 필요한 URL 설정
item → 구성 → 빌드 유발 → Build When a change is pushed to GitLab. GitLab webhook URL: [URL] 체크(GitLab에서 사용) → 고급 → Secret token → Generate 클릭 → 토큰 생성
13. Webhook 설정(GitLab)
GitLab 프로젝트 → Settings → Webhooks → 아래와 같이 URL, Generate token, 체크 → Add webhook
14. webhook Test
Test → Push events
아래와 같이 젠킨스 item 내용이 바뀌면 연동 성공
📌 Gradle 설정(Gradle 7.6)
15. Gradle 추가
Jenkins 관리 → Global Tool Configuration → Gradle → Add Gradle
name : gradle 7.6 [원하는 name]
Version : gradle 7.6 [스프링 프로젝트 버전에 맞는 gradle 버전]
16. Gradle 설정
구성 → Build Steps → invoke Gradle script
📌 젠킨스 ↔ EC2 연동
17. SSH 플러그인 설치
EC2 서버 환경에 접속할 수 있는 플러그인 설치( 7번에서 GitLab 플러그인 설치 후 Credentals 설정과 동일 )
Kind : SSH Username with private key
Scope : Global
ID : [원하는 ID]
Username : [원하는 name]
Private Key : Enter directly
Key -> EC2 접속 시 사용하는 .pem 파일에 있는 PRIVATE KEY 복붙
18. 추가한 Credentials 설정
Jenkins 관리 - 시스템 설정 - SSH Remote hosts
Hostname: [EC2 public ip]
Port: 22
Credentials: [앞서 생성한 SSH credential]
여기서 EC2 Ubuntu 사용하는 경우 버전 호환 이슈인지 22.04 서버는 젠킨스에서 연결할 수가 없음
EC2 생성 시 Ubuntu Server 20.04 LTS 로 생성한 이유
19. Build step 추가 - Build 된 .jar 파일 Ubuntu 배포 서버로 전송
젠킨스 도커 컨테이너로 접속하는 명령어 (호스트 ▶ 도커 컨테이너)
docker exec -it [컨테이너이름] /bin/bash
docker exec -it jenkins /bin/bash
젠킨스로 빌드하여 생성한 .jar 파일을 Ubuntu 배포 서버로 파일 전송하기
젠킨스 도커 컨테이너도 가상 환경 서버 ▶ Ubuntu 서버로 .jar 파일을 옮겨줘야 Ubuntu 배포 서버에서 프로젝트를 돌릴 수 있다.
scp -v -o StrictHostKeyChecking=no -i [.pem 파일 경로] [젠킨스 도커 컨테이너 내에 .jar파일이 생성되는 경로] [ubuntu 원격 접속 주소]:[.jar 파일 전송할 ubuntu 경로]
scp -v -o StrictHostKeyChecking=no -i /t****.pem /var/jenkins_home/workspace/da***n**ng/backend/build/libs/d***y-da***n**ng-0.0.1-SNAPSHOT.jar ubuntu@ec2-*-**-**-***.ap-northeast-2.compute.amazonaws.com:/home/ubuntu/da***n**ng
20. Build step 추가 - Ubuntu에 만들어둔 deploy.sh 파일 실행
SSH site : 앞에서 추가한 SSH
Command : [작성한 deploy.sh 가 있는 경로]
각 단계별로 에러 발생된 부분은 따로 포스팅함.
'Network' 카테고리의 다른 글
CORS란? 개념 정리 및 동작 방식 (0) | 2023.03.24 |
---|---|
[Infra] GitHub Actions + DockerHub + AWS EC2 로 프로젝트 CI/CD 구축 (0) | 2023.03.14 |
[Doker] 🐳 도커(Docker) 그룹 생성 (0) | 2023.01.20 |
[Linux] ✍ 자주쓰는 리눅스 명령어 정리 (1) | 2023.01.19 |
Nginx(엔진엑스) 개념정리 및 설치, Blue/Green 무중단배포란? (0) | 2023.01.16 |