🔍 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 클릭
## 해당 깃랩 프로젝트의 ID/PW 가 사전 설정되어 있어야 함!!
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 가 있는 경로]
출처 : Jenkins(젠킨스), GitLab ↔ Jenkins ↔ EC2 연동하여 CI/CD 구축 (tistory.com)
'[AWS-FRF] > CICD' 카테고리의 다른 글
[중요][젠킨스] Item Description ( 설명 ) HTML 형식으로 작성하기!! (15) | 2024.08.30 |
---|---|
[Spring] bootjar과 그냥 build의 차이!! (17) | 2024.08.29 |
[중요2][AWS] GitLab 저장소 이전하기!! (17) | 2024.08.27 |
[중요2][AWS] 깃랩 Import and export settings !! (56) | 2024.08.27 |
[중요2][AWS] Jenkins + Spring Boot 배포!! (90) | 2024.08.23 |
[중요][AWS] 젠킨스, AWS EC2 우분투에 git 설치!! (52) | 2024.08.23 |
[중요][AWS][CI/CD] 환경 구성 - EC2(Jenkins, GitLab) 설치!! (58) | 2024.08.22 |
[참고][AWS] 스프링 부트 jar 빌드와 AWS EC2 배포 방법!! (64) | 2024.08.19 |
댓글