https://everyday-spring.com/630
https://everyday-spring.com/631
https://subin0522.tistory.com/632
찐찐 마지막... 이제 진짜 배포 해볼게요
Jenkins Setting
이제 웹에서 EC2 ubuntu에 설치한 Jenkins에 접근할 수 있습니다
주소창에 hostname:port를 입력하면 되는데
- hostname -> Instance의 public IP
- port -> Jenkins 컨테이너 실행할 때 지정한 포트번호 (기본 8080)
이 페이지가 나오면! 잘 들어간것
https://everyday-spring.com/628
위 글을 참고해서 초기 Jenkins 초기 설정을 한다
저 Administrator password를 모르겠다면
sudo cat /var/jenkins_home/secrets/initialAdminPassword
를 입력해 확인할 수 있다
Jenkins Plugin 설치
사람에게는 망각이라는 기능이 있다
3일동안 CI/CD 세팅만하느라 플러그인을 이것 저것 깔았는데
결론적으로 내가 새로 설치한거 다 까먹었다는 뜻
Docker Pipeline
Docker plugin
GitHub Branch Source Plugin
Gradle Plugin
Pipeline
Pipeline Graph View Plugin
Pipeline: GitHub Groovy Libraries
Publish Over SSH
SSH Agent Plugin
SSH server
Workspace Cleanup Plugin
우선 여기 스킵하시고..
안된다면 이 중 설치되어 있지 않은... 플러그인을 설치해보시기 바랍니다...
플러그인은 Jenkins 관리 - Plugins - Available plugins 에서 설치가 가능하다
Jenkins Credentials 등록
CI/CD를 위해 세가지 Credentials을 등록한다
등록을 위해 필요한 정보들
- Github
- Github 계정 이름, token
- dockerhub
- dockerhub에 가입된 계정 ID, Password
- aws
- instance .pem 파일
Jenkins 관리 - credentials 화면에서 (global) 클릭
우측 상단에 파란색 + Add Credentials 버튼을 클릭해서 추가할 수 있다
Username - GitHub 계정명
Password - GitHub에서 발급받은 token
ID - Jenkins 내부에서 사용할 이름
세가지 항목을 입력하고 생성해준다
나는 ID를 github로 지정했다
Username - dockerhub 로그인 ID
Password - dockerhub 로그인 Password
ID - Jenkins 내부에서 사용할 이름
세가지 항목을 입력하고 생성
Kind를 SSH Username with private key로 변경
ID - Jenkins 내부에서 사용할 이름
Username - 서버에 로그인 할 수 있는 계정명 (EC2 ubuntu 기본세팅이면 ubuntu입력하면 된다)
Private Key - EC2 .pem 파일을 메모장으로 열어 전체 복사 붙여넣기
세가지 항목을 입력하고 생성
이렇게 세개의 Credentials을 생성했다
Jenkins Pipeline CI/CD
새로운 아이템을 등록한다
이름을 설정하고 pipeline을 선택
GitHub project (대상 repository 주소 입력)
GitHub hook trigger for GITScm polling
두 항목 체크
Pipeline을 작성한다!
pipeline {
agent any
environment {
DOCKER_IMAGE = 'user05/application' // 배포할 이미지 이름 지정
GIT = 'github' // credentialsId
CREDENTIALS_ID = 'aws' // credentialsId
SERVER_IP = '12.34.567.890' // ec2 public IP
}
stages {
stage('Clone Repository') {
steps {
git branch: 'main', // 배포할 branch명
credentialsId: GIT,
url: 'https://github.com/github_id/github_repository.git' // github repository 링크
}
}
stage('Build') {
steps {
sh 'chmod +x gradlew'
sh './gradlew clean build'
}
}
stage('Bulid Docker') {
steps {
echo 'Bulid Docker'
script {
dockerImage = docker.build("user05/application:latest")
}
}
post {
success {
echo 'Successfully Docker Build'
}
failure {
error 'This pipeline stops here...'
}
}
}
stage('Push Docker') {
steps {
echo 'Push Docker'
script {
docker.withRegistry('', 'dockerhub-credentials') { // credentialsId
dockerImage.push('latest')
}
}
}
}
stage('Deploy to EC2') {
steps {
sshagent([CREDENTIALS_ID]) {
sh """
ssh -o StrictHostKeyChecking=no ubuntu@${SERVER_IP} '
docker pull ${DOCKER_IMAGE}:latest &&
docker stop applicationName || true && // 기존 컨테이너 중지
docker rm applicationName || true && // 기존 컨테이너 삭제
docker run -d --name applicationName -p 9090:9090 \ // 새로운 컨테이너 배포
-e PROD_MASTER_JDBC_URL=환경변수를 입력해줌 \
-e PROD_MASTER_USERNAME=환경변수를 입력해줌 \
${DOCKER_IMAGE}:latest '
"""
}
}
}
}
}
주석 및 한글로 작성한 부분을 필요에 맞게 수정한다
EC2 public IP와 지정한 port에서 애플리케이션 서버가 정상 동작함을 확인했다!
해당 예시로 보면 12.34.567.890:9090