pipeline {
agent any
stages {
stage('Clone') {
steps{
git branch: '{변경 감지 할 브랜치}', credentialsId: '{credential 아이디}', url: '{web-hook 보내는 git 리포지토리 주소 ex) ~~.git}'
sh "sed -i 's/{docker-compose.yml에서 암호화된 JASYPT_KEY}/{암호화 전 키}/g' docker-compose.yml"
sh "cat docker-compose.yml"
}
}
stage('Build'){
steps{
dir('backend/farmyo') {
sh "chmod +x gradlew"
sh "./gradlew clean build"
}
}
}
stage('Deploy') {
steps{
// 이전에 실행된 컨테이너를 중지하고 삭제합니다.
sh "docker stop farmyo-backend || true"
sh "docker rm farmyo-backend || true"
sh "docker stop farmyo-frontend || true"
sh "docker rm farmyo-frontend || true"
// 이전에 빌드된 이미지를 삭제합니다.
sh "docker rmi farmyo_pipeline-farmyo-frontend || true"
sh "docker rmi farmyo_pipeline-farmyo-backend || true"
sh "docker ps -a || true"
sh "docker images || true"
sh "docker compose build --no-cache"
sh "docker compose up -d"
}
}
}
post {
success {
script {
def Author_ID = sh(script: "git show -s --pretty=%an", returnStdout: true).trim()
def Author_Name = sh(script: "git show -s --pretty=%ae", returnStdout: true).trim()
mattermostSend (color: 'good',
message: "빌드 성공 ^_^ v : ${env.JOB_NAME} #${env.BUILD_NUMBER} by ${Author_ID}(${Author_Name})\\n(<${env.BUILD_URL}|Details>)",
endpoint: '{deploy 알림을 받을 Mattermost 채널 주소}',
channel: '{알림 받을 채널 명}'
)
}
}
failure {
script {
def Author_ID = sh(script: "git show -s --pretty=%an", returnStdout: true).trim()
def Author_Name = sh(script: "git show -s --pretty=%ae", returnStdout: true).trim()
mattermostSend (color: 'danger',
message: "빌드 실패 ㅜ_ㅜ : ${env.JOB_NAME} #${env.BUILD_NUMBER} by ${Author_ID}(${Author_Name})\\n(<${env.BUILD_URL}|Details>)",
endpoint: '{deploy 알림을 받을 Mattermost 채널 주소}',
channel: '{알림 받을 채널 명}'
)
}
}
}
}
version: '3.8'
services:
farmyo-frontend:
container_name: farmyo-frontend
build:
context: ./frontend/farmyo
dockerfile: Dockerfile
ports:
- "80:80"
- "443:443"
volumes:
- /etc/letsencrypt:/etc/letsencrypt
- /var/lib/letsencrypt:/var/lib/letsencrypt
- /home/ubuntu/conf:/etc/nginx/conf.d
networks:
- farmyo_network
farmyo-backend:
container_name: farmyo-backend
build:
context: ./backend/farmyo
dockerfile: Dockerfile
ports:
- "8080:8080"
environment:
JASYPT_KEY: {암호화 된 JASYPT_KEY}
networks:
- farmyo_network
networks:
farmyo_network:
driver: bridge
FROM node:lts-alpine as build-stage
WORKDIR /homepage
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage ./homepage/build /usr/share/nginx/html/
CMD ["nginx", "-g", "daemon off;"]