Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 0 additions & 96 deletions .github/workflows/CICD.yml

This file was deleted.

110 changes: 46 additions & 64 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@ pipeline {

environment {
DISCORD_WEBHOOK = credentials('discord-webhook')
DB_DRIVER = 'mysql'
DB_HOST = 'mysql-ci'
DB_PORT = '3306'
DB_NAME = 'homeaid_db'
DB_USERNAME = 'homeaid_user'
DB_PASSWORD = 'root'
}

tools {
Expand All @@ -16,34 +22,13 @@ pipeline {
}
}

stage('Build MySQL Service') {
stage('Set Variables') {
steps {
script {
// Docker๋กœ MySQL ์ปจํ…Œ์ด๋„ˆ ๋„์šฐ๊ธฐ (jenkins ์„œ๋ฒ„์— Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•จ)
sh '''
docker run -d \
--name mysql-ci \
-e MYSQL_DATABASE=${DB_NAME} \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_USER=homeaid_user \
-e MYSQL_PASSWORD=${DB_PASSWORD} \
-p 3306:3306 \
--health-cmd="mysqladmin ping -h localhost --silent" \
--health-interval=10s \
--health-timeout=5s \
--health-retries=3 \
mysql:latest

# DB ์ค€๋น„ ๋Œ€๊ธฐ (์ตœ๋Œ€ 60์ดˆ)
for i in {1..12}; do
if docker exec mysql-ci mysqladmin ping -h localhost --silent; then
echo "MySQL is ready!"
break
fi
echo "Waiting for MySQL..."
sleep 5
done
'''
wrap([$class: 'BuildUser']) {
script {
env.BUILD_USER = "${env.BUILD_USER}"
echo "Triggered by: ${env.BUILD_USER}"
}
}
}
}
Expand All @@ -67,47 +52,44 @@ pipeline {

post {
success {
script {
def message = """{
"embeds": [{
"title": "โœ… CI ์„ฑ๊ณต",
"description": "**๐Ÿ“ฆ Repository:** `${env.JOB_NAME}`\\n**๐ŸŒฟ Branch:** `${env.BRANCH_NAME}`\\n**๐Ÿ‘ค Triggered by:** `${env.BUILD_USER}`\\n[๐Ÿ”— Jenkins ๋กœ๊ทธ ํ™•์ธํ•˜๊ธฐ](${env.BUILD_URL})",
"color": 5763719
}],
"content": "โœ… CI ํ†ต๊ณผ: `${env.BRANCH_NAME}` ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค!"
}"""
sh """
curl -H "Content-Type: application/json" \
-X POST \
-d '${message}' \
${DISCORD_WEBHOOK}
"""
wrap([$class: 'BuildUser']) {
script {
def message = """{
"embeds": [{
"title": "โœ… CI ์„ฑ๊ณต",
"description": "**๐Ÿ“ฆ Repository:** `${env.JOB_NAME}`\\n**๐ŸŒฟ Branch:** `${env.BRANCH_NAME}`\\n**๐Ÿ‘ค Triggered by:** `${env.BUILD_USER}`\\n[๐Ÿ”— Jenkins ๋กœ๊ทธ ํ™•์ธํ•˜๊ธฐ](${env.BUILD_URL})",
"color": 5763719
}],
"content": "โœ… CI ํ†ต๊ณผ: `${env.BRANCH_NAME}` ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค!"
}"""
sh """
curl -H "Content-Type: application/json" \
-X POST \
-d '${message}' \
${DISCORD_WEBHOOK}
"""
}
}
}
failure {
script {
def message = """{
"embeds": [{
"title": "โŒ CI ์‹คํŒจ",
"description": "**๐Ÿ“ฆ Repository:** `${env.JOB_NAME}`\\n**๐ŸŒฟ Branch:** `${env.BRANCH_NAME}`\\n**๐Ÿ‘ค Triggered by:** `${env.BUILD_USER}`\\n[๐Ÿ”— Jenkins ๋กœ๊ทธ ํ™•์ธํ•˜๊ธฐ](${env.BUILD_URL})",
"color": 16711680
}],
"content": "โ— CI ์‹คํŒจ ๋ฐœ์ƒ: `${env.BRANCH_NAME}` ๋ธŒ๋žœ์น˜ ํ™•์ธํ•ด์ฃผ์„ธ์š”!"
}"""
sh """
curl -H "Content-Type: application/json" \
-X POST \
-d '${message}' \
${DISCORD_WEBHOOK}
"""
wrap([$class: 'BuildUser']) {
script {
def message = """{
"embeds": [{
"title": "โŒ CI ์‹คํŒจ",
"description": "**๐Ÿ“ฆ Repository:** `${env.JOB_NAME}`\\n**๐ŸŒฟ Branch:** `${env.BRANCH_NAME}`\\n**๐Ÿ‘ค Triggered by:** `${env.BUILD_USER}`\\n[๐Ÿ”— Jenkins ๋กœ๊ทธ ํ™•์ธํ•˜๊ธฐ](${env.BUILD_URL})",
"color": 16711680
}],
"content": "โ— CI ์‹คํŒจ ๋ฐœ์ƒ: `${env.BRANCH_NAME}` ๋ธŒ๋žœ์น˜ ํ™•์ธํ•ด์ฃผ์„ธ์š”!"
}"""
sh """
curl -H "Content-Type: application/json" \
-X POST \
-d '${message}' \
${DISCORD_WEBHOOK}
"""
}
}
}
always {
// Clean up MySQL container
sh '''
docker stop mysql-ci || true
docker rm mysql-ci || true
'''
}
}
}
38 changes: 38 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
version: '3.8'

services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
networks:
- ci-network

mysql-ci:
image: mysql:latest
container_name: mysql-ci
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: homeaid_db
MYSQL_USER: homeaid_user
MYSQL_PASSWORD: root
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 5
networks:
- ci-network

volumes:
jenkins_home:

networks:
ci-network:
driver: bridge