https://soyeon-story.tistory.com/46
Docker + jenkins 로 spring boot CI/CD 구축하기 - 1
Ubuntu - Jenkins Docker 컨테이너 구축하기1. Jenkins Docker 이미지 다운로드 및 실행sudo docker run -d --name jenkins -p 8080:8080 jenkins/jenkins 2. ip:8080으로 젠킨스 접속 3. 패스워드 등록- 아래 명령어를 입력 후
soyeon-story.tistory.com
1. CD 구축하기
1) SSH 플러그인 설치
- 젠킨스 관리 > plugins > ssh agnet 설치
2. SSH key 생성 및 등록
1) jenkins 컨테이너 내에서 키를 생성한다.
// key 생성
ssh-keygen -t rsa -b 4096
// key 생성
cat ~/.ssh/id_rsa // 개인키
cat ~/.ssh/id_rsa.pub // 공개키
2) New credentials 등록
- Dashboard > jenkins 관리 > Credentials > Add Credentials
- Kind를 SSH Username with private key를 선택하고 ID, Username(인스턴스 os명), Private Key 를 적어준다.
- Private Key 는 -----BEGIN OPENSSH PRIVATE KEY----- ~ -----END OPENSSH PRIVATE KEY----- 까지 전부 적어준다.
3) 호스트 서버(리모트 서버)에 Public key 등록
- 젠킨스 컨테이너 내에서 발급받은 Public key를 복사한다.
- 호스트 서버 .ssh 경로의 authorized_keys 파일에 복사한 Public key를 붙여넣기한다.
3. Pipeline script 수정
- ssh : ssh 를 사용하여 원격 서버에 접속하는 명령어
- 172.17.0.1 :
도커 호스트(현재 CentOS)를 말한다.
=> 도커를 설치하면 자동으로 생성되는 IP
=> 도커 안에 각각의 컨테이너는 172.17.0.2, 172.17.0.3 와 같은 IP를 가지게 된다.
=> 보통 127.0.0.1 하면 자신의 OS를 가르키는데 도커 호스트에서는 자기 자신을 가르치기 때문에 172.17.0.1을 사용하여 바깥쪽에
감싸는 호스트에 접근한다.
* 원격서버의 IP를 적으면 접근이 불가능하다.
pipeline {
agent any
tools {
gradle 'gradle'
}
stages {
stage('저장소 복제') {
steps {
git branch: 'main', credentialsId: '[git 연결 위한 credentialsID]', url: '[저장소명]'
}
}
stage('권한 설정') { // 실행 권한 부여 단계 추가
steps {
sh 'chmod +x ./gradlew'
}
}
stage('빌드') {
steps {
sh "./gradlew clean build"
}
}
stage('배포') {
steps {
sshagent(credentials: ['instance-key']) {
sh '''
ssh -o StrictHostKeyChecking=no [사용자계정명]@172.17.0.1 uptime
scp build/libs/[프로젝트 jar파일명] soyeon@172.17.0.1:[jar파일을 복사할 원격서버의 디렉토리경로]
// 원격서버에서 실행시킬 스크립트 경로
ssh -t soyeon@172.17.0.1 /home/soyeon/project/backend-server/backend-server.sh
'''
}
}
}
}
}
4. 원격서버에 셸 스크립트 작성
// backend-server.sh 생성
echo "jar mv"
# 젠킨스 서버에서 받아온 .jar 파일을 프로젝트 디렉토리로 이동시킨다.
mv /home/soyeon/project/jenkins/backend-0.0.1-SNAPSHOT.jar /home/soyeon/project/backend-server/
echo "page mv"
# 프로젝트 디렉토리로 이동한다.
cd /home/soyeon/project/backend-server/
echo "docker stop & remove"
# 실행중인 docker container를 중지 + 삭제한다. (이미 중지되어 있거나 존재하지 않는다면 무시한다)
docker stop backend-container || true
docker rm backend-container || true
echo "docker start"
# 현재 디렉토리에서 Docker 이미지를 빌드한다.
docker build -t backend .
# backend라는 태그가 붙은 Docker 이미지를 기반으로 backend-container라는 이름의 새로운 컨테이너를 시작한다.
docker run -d --name backend-container -p 8080:8080 backend
// 프로젝트 디렉토리에 Dockerfile 생성
FROM openjdk:17-jdk-alpine
# 작업 디렉토리 생성
WORKDIR /app
# 현재 디렉토리의 .jar 파일을 컨테이너 내부로 복사
COPY backend-0.0.1-SNAPSHOT.jar /app/backend.jar
EXPOSE 8080
# 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "/app/backend.jar"]
5. 젠킨스 실행
- console을 확인하며 테스트한다.
'Server' 카테고리의 다른 글
Jenkins + Docker + Nginx + React 프로젝트 배포하기 - 2 (0) | 2024.11.26 |
---|---|
Jenkins + Docker + Nginx + React 프로젝트 배포하기 - 1 (1) | 2024.11.08 |
Docker + jenkins 로 spring boot CI/CD 구축하기 - 1 (0) | 2024.10.30 |
Ubuntu - Jenkins Docker 컨테이너 구축하기 (2) | 2024.09.08 |
Docker jar 배포 - 3. Docker 이미지 삭제 (0) | 2024.09.08 |