-
Notifications
You must be signed in to change notification settings - Fork 0
Test Deployment Environment
Lee Min Wook edited this page Feb 28, 2022
·
17 revisions
| Type | vCPU | Memory(GiB) |
|---|---|---|
| t2.micro | 1 | 1 |
- 엔진엑스(Nginx)는 동시접속 처리에 특화된 웹 서버이다.
- 정적 파일을 처리하는 HTTP 서버역할
- 클라이언트와 앱서버 사이를 중계하는 리버스 프록시 역할
- EC2에 설치된 Jenkins와 테스트서버를 공격으로부터 보호 역할
- https 이용 목적
sudo apt update
sudo apt install nginx
service nginx status
http://my-ec2-ip 을 통해 nginx 기본 화면 나온다면 성공cd /etc/nginx/sites-available
vim default Nginx 설정보기
upstream react-dev{
server localhost:90;
}
## 테스트 서버 http
server {
listen 80;
server_name www.react-dev.p-e.kr react-dev.p-e.kr;
charset UTF-8;
location / {
proxy_pass http://react-dev;
}
error_page 404 403 /;
}
upstream jenkins{
server localhost:8080;
}
## 젠킨스 http
server {
listen 80;
server_name www.jenkins.p-e.kr jenkins.p-e.kr;
return 301 https://$host$request_uri;
}
## 젠킨스 https
server{
listen 443 ssl;
server_name www.jenkins.p-e.kr jenkins.p-e.kr;
charset UTF-8;
location / {
proxy_pass http://jenkins;
}
error_page 404 403 /;
ssl_certificate /etc/letsencrypt/live/www.mw.r-e.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.mw.r-e.kr/privkey.pem;
}- 지속적인 통합(Continuous integration,CI)과 지속적 배포(Continuous delivery, CD) 환경을 구축하기 위한 도구이다. 빌드, 테스트, 배포 프로세스를 자동화 하여 품질과 개발 생산성을 높이 수 있다.
- CI를 통해 코드의 품질을 높이기
- CD를 통해 프론트,백엔드 진행 상황 공유 및 이중 체크를 실제 배포 전 버그를 미리 찾기
apt-get update
sudo apt install openjdk-11-jdk
java -version
sudo wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list'
sudo apt-get install jenkins
service jenkins start
service jenkins status
http://my-ec2-ip:8080 을 통해 jenkins 화면이 나온다면 성공Jenkins 설정보기
pipeline {
agent any
tools{
git "git"
}
environment {
SLACK_CHANNEL = '#프론트배포'
MESSAGE = "${env.JOB_NAME} [${env.BUILD_NUMBER}] \n URL: ${env.BUILD_URL} \n BRANCH : $REF \n PUSHER : $PUSHER_NAME ($PUSHER_EMAIL) "
SUCCESS_MESSAGE = "SUCCESSFUL: ${MESSAGE}"
ERROR_MESSAGE = "FAILED: ${MESSAGE}"
START_MESSAGE = "STARTED: ${MESSAGE}"
}
// stages 하위에는 stage가 있고
// stage는 stpes로 나뉘어 작업을 한다.
stages {
stage("prepare"){
steps{
echo 'prepare'
git branch: "${BRANCH}", credentialsId: "GIT_ACCOUNT", url: 'https://github.com/Book-Pie/FE.git'
sh 'ls -al'
}
}
// CD 시작
stage('start') {
steps {
echo '=====================start====================='
slackSend (channel: "${SLACK_CHANNEL}", color: '#FFFF00', message: "${START_MESSAGE}")
}
}
// 리액트 빌드 시작
stage('build') {
steps {
script {
try{
echo '=====================build====================='
sh 'ls -al'
sh "git checkout "
sh "sudo yarn install"
sh "sudo yarn build"
}catch(Exception e){
slackSend (channel: "${SLACK_CHANNEL}", color: '#FF0000', message: "${ERROR_MESSAGE}")
}
}
}
}
// 리액트 도커에 deploy
stage('deploy') {
steps {
script {
try{
echo '=====================deploy====================='
sh "ls -al"
sh "docker rm -f `docker ps -a -q`"
sh "docker rmi `docker images -q`"
sh "docker-compose up -d"
}catch(Exception e){
slackSend (channel: "${SLACK_CHANNEL}", color: '#FF0000', message: "${ERROR_MESSAGE}")
}
}
}
}
}
post {
success {
slackSend (channel: "${SLACK_CHANNEL}", color: '#00FF00', message: "${SUCCESS_MESSAGE}")
}
failure {
slackSend (channel: "${SLACK_CHANNEL}", color: '#FF0000', message: "${ERROR_MESSAGE}")
}
}
}