pyo92 / project-lottery

Spring boot 복권 서비스 (Monolithic)
1 stars 0 forks source link

jenkins pipeline 최신 데이터 유지 #163

Closed pyo92 closed 4 months ago

pyo92 commented 4 months ago

github 소스가 변경되면, jenkins pipeline script 를 통해 ci/cd 처리가 된다.

docker 컨테이너는 down 후, 새로 생성되므로 데이터가 유지되지 않았다. 그래서 매번 init sql 파일을 github 에 최신화해줘야 하는 번거로움이 있었고, 이를 해결해보려 한다.

기존 lotto aws ec2 인스턴스에 최신 데이터를 백업하고, 컨테이너를 다시 생성하고 시작하기 직전 이 백업 데이터를 이용해 데이터를 유지하는 sh 파일을 생성할 예정이다.

jenkins pipeline script 에서는 해당 sh 파일을 실행하도록 수정할 예정이다.

pyo92 commented 4 months ago

아래와 같은 shell script 를 작성하여 jenkins pipeline 에서 동작하도록 처리했다.

# 백업 파일 경로
BACKUP_DIR="./backup/$(date +%Y%m%d)"

# 백업 파일 경로 생성
if [ ! -d "$BACKUP_DIR" ]; then
        mkdir -p "$BACKUP_DIR"
fi

# mysqldump
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" purchase > "$BACKUP_DIR"/purchase.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" lotto > "$BACKUP_DIR"/lotto.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" lotto_prize > "$BACKUP_DIR"/lotto_prize.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" lotto_win_shop > "$BACKUP_DIR"/lotto_win_shop.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" purchase_result > "$BACKUP_DIR"/purchase_result.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" region > "$BACKUP_DIR"/region.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" user_combination > "$BACKUP_DIR"/user_combination.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" user > "$BACKUP_DIR"/user.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" shop > "$BACKUP_DIR"/shop.sql;

# 백업 완료 메시지
echo "Backup completed: $BACKUP_DIR"

# sql 파일 deploy/database/init 경로에 복사
\cp -f "$BACKUP_DIR"/*.sql ./deploy/database/init`
# 백업 파일 경로
BACKUP_DIR="./backup/$(date +%Y%m%d)"

# 백업 파일 경로 생성
if [ ! -d "$BACKUP_DIR" ]; then
        mkdir -p "$BACKUP_DIR"
fi

# mysqldump
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" purchase > "$BACKUP_DIR"/purchase.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" lotto > "$BACKUP_DIR"/lotto.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" lotto_prize > "$BACKUP_DIR"/lotto_prize.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" lotto_win_shop > "$BACKUP_DIR"/lotto_win_shop.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" purchase_result > "$BACKUP_DIR"/purchase_result.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" region > "$BACKUP_DIR"/region.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" user_combination > "$BACKUP_DIR"/user_combination.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" user > "$BACKUP_DIR"/user.sql;
docker exec project-lottery-database mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --tables "$DB_NAME" shop > "$BACKUP_DIR"/shop.sql;

# 백업 완료 메시지
echo "Backup completed: $BACKUP_DIR"

# sql 파일 deploy/database/init 경로에 복사
\cp -f "$BACKUP_DIR"/*.sql ./deploy/database/init