279 lines
11 KiB
Plaintext
279 lines
11 KiB
Plaintext
|
|
pipeline {
|
||
|
|
agent {
|
||
|
|
label "master_node"
|
||
|
|
}
|
||
|
|
|
||
|
|
environment {
|
||
|
|
// 以年-月-日_时-分-秒生成备份版本号
|
||
|
|
BACKUP_TAG = "${new Date().format('yyyy-MM-dd_HH-mm-ss')}"
|
||
|
|
GIT_REPO_URL = '192.168.160.39/backend/wc-server-update.git'
|
||
|
|
GIT_BRANCH = "main"
|
||
|
|
GIT_CREDENTIALS_ID = "55281c9f-91ef-4aa1-98e4-b5f5b879a45f"
|
||
|
|
GIT_CLONE_DIR = "wc_server_update"
|
||
|
|
SSH_REMOTE_USER = "cicd"
|
||
|
|
SSH_REMOTE_HOST = "18.138.0.71"
|
||
|
|
SSH_REMOTE_PORT = 22229
|
||
|
|
// 远端的更新包上传目录
|
||
|
|
SSH_REMOTE_PUSH_DIR = "~/server/"
|
||
|
|
|
||
|
|
PROJECT_NAME = "wc-server-update"
|
||
|
|
|
||
|
|
|
||
|
|
// 下面是备份以及更新的目录
|
||
|
|
// 远端的 server 目录
|
||
|
|
SERVER_DIR="/home/cicd/temp/data/code/server"
|
||
|
|
// 远端的 map 目录
|
||
|
|
MAP_DIR="/home/cicd/temp/data/code/slotmap"
|
||
|
|
|
||
|
|
|
||
|
|
EBIN_DIR="${SERVER_DIR}/ebin/"
|
||
|
|
GAMEALGO_DIR="${SERVER_DIR}/gamealgo/"
|
||
|
|
|
||
|
|
BACKUP_DIR="/home/cicd/temp/data/code/server_backup/"
|
||
|
|
BACKUP_NAME="${BACKUP_DIR}/${BACKUP_TAG}"
|
||
|
|
|
||
|
|
|
||
|
|
Backup_Ebin="${Update_Ebin}"
|
||
|
|
Backup_Slotmap="$Update_Slotmap"
|
||
|
|
Backup_Gamealgo="$Update_Gamealgo"
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
stages {
|
||
|
|
stage('See Version') {
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
sh "git --version"
|
||
|
|
sh "python3 --version"
|
||
|
|
sh "rsync --version"
|
||
|
|
sh "/usr/local/sbin/python3 ~/scripts/notify_server.py start null ${PROJECT_NAME} ${Build_Options}"
|
||
|
|
if ( "$Build_Options" != "Hot" && "$Build_Options" != "Restart" && "$Build_Options" != "Add" ) {
|
||
|
|
error "Options Error"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stage ("Git Pull") {
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
echo "Attention: Git Pull [I Will Start]"
|
||
|
|
withCredentials([usernamePassword(credentialsId: GIT_CREDENTIALS_ID, usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')]) {
|
||
|
|
// URL编码用户名和密码
|
||
|
|
def encodedUsername = URLEncoder.encode(GIT_USERNAME, "UTF-8")
|
||
|
|
def encodedPassword = URLEncoder.encode(GIT_PASSWORD, "UTF-8")
|
||
|
|
|
||
|
|
if (fileExists(GIT_CLONE_DIR)) {
|
||
|
|
dir(GIT_CLONE_DIR) {
|
||
|
|
// 目录存在, 同步代码
|
||
|
|
echo "Attention: Git Code - I Will Pull Code!"
|
||
|
|
sh "git pull origin ${GIT_BRANCH}"
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
// 目录不存在时使用
|
||
|
|
// 使用URL编码后的用户名和密码克隆仓库
|
||
|
|
echo "Attention: Git Code - I Will Clone Code!"
|
||
|
|
sh "git clone -b ${GIT_BRANCH} http://${encodedUsername}:${encodedPassword}@${GIT_REPO_URL} ${GIT_CLONE_DIR}"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
echo "Attention: Git Pull [I Finish]"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stage("Rsync Code") {
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
echo "Attention: Rsync Code [I Will Start]"
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
cd ${SSH_REMOTE_PUSH_DIR}
|
||
|
|
pwd
|
||
|
|
if [ -d ${GIT_CLONE_DIR} ]
|
||
|
|
then
|
||
|
|
# /usr/bin/cp -r ${GIT_CLONE_DIR} ${GIT_CLONE_DIR}_${BACKUP_TAG}
|
||
|
|
echo "No Backup This Project"
|
||
|
|
fi
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
sh "rsync -avz -e 'ssh -p${SSH_REMOTE_PORT}' --exclude=${GIT_CLONE_DIR}/.git ${GIT_CLONE_DIR} ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST}:${SSH_REMOTE_PUSH_DIR}/"
|
||
|
|
echo "Attention: Rsync Code [I Finish]"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stage ("Check Directiory") {
|
||
|
|
// SERVER_DIR="/home/cicd/temp/data/code/server"
|
||
|
|
// // 远端的 map 目录
|
||
|
|
// MAP_DIR="/home/cicd/temp/data/code/slotmap"
|
||
|
|
|
||
|
|
|
||
|
|
// EBIN_DIR="${SERVER_DIR}/ebin/"
|
||
|
|
// GAMEALGO_DIR="${SERVER_DIR}/gamealgo/"
|
||
|
|
|
||
|
|
// BACKUP_DIR="/home/cicd/temp/data/code/server_backup/"
|
||
|
|
// BACKUP_NAME="${BACKUP_DIR}/${BACKUP_TAG}"
|
||
|
|
// cd ${SSH_REMOTE_PROJECT_PARENT_DIR}
|
||
|
|
// [ ! -d ${SSH_REMOTE_PROJECT_DIR}_backup ] && mkdir ${SSH_REMOTE_PROJECT_DIR}_backup
|
||
|
|
// cp -r ${SSH_REMOTE_PROJECT_DIR} ${SSH_REMOTE_PROJECT_DIR}_backup/${SSH_REMOTE_PROJECT_DIR}_${BACKUP_TAG}
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
[ -d $SERVER_DIR ] && [ -d $MAP_DIR ] && [ -d $EBIN_DIR ] && [ -d $BACKUP_DIR ] && [ -d $GAMEALGO_DIR ] && echo "Check Success"
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stage("Pause Process") {
|
||
|
|
steps {
|
||
|
|
echo "Please Let The Admin Check Update Dir = [ Temp Message No Message Now ]"
|
||
|
|
echo "Attention: Pause Process - Please Let The Admin Decide Update Or Not!"
|
||
|
|
echo "Attention Attention Attention: Next Process Will Handle Remote Host! "
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stage("Backup Server") {
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
echo "Backup_Ebin: $Backup_Ebin"
|
||
|
|
echo "Backup_Slotmap: $Backup_Slotmap"
|
||
|
|
echo "Backup_Gamealgo: $Backup_Gamealgo"
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
if [[ $Backup_Ebin == true ]]
|
||
|
|
then
|
||
|
|
if [ ! -d $BACKUP_NAME ]
|
||
|
|
then
|
||
|
|
mkdir -p $BACKUP_NAME
|
||
|
|
fi
|
||
|
|
/usr/bin/cp -r $EBIN_DIR $BACKUP_NAME/
|
||
|
|
fi
|
||
|
|
if [[ $Backup_Slotmap == true ]]
|
||
|
|
then
|
||
|
|
if [ ! -d $BACKUP_NAME ]
|
||
|
|
then
|
||
|
|
mkdir -p $BACKUP_NAME
|
||
|
|
fi
|
||
|
|
/usr/bin/cp -r $MAP_DIR $BACKUP_NAME/
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ $Backup_Gamealgo == true ]]
|
||
|
|
then
|
||
|
|
if [ ! -d $BACKUP_NAME ]
|
||
|
|
then
|
||
|
|
mkdir -p $BACKUP_NAME
|
||
|
|
fi
|
||
|
|
/usr/bin/cp -r $GAMEALGO_DIR $BACKUP_NAME/
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -d $BACKUP_NAME ]
|
||
|
|
then
|
||
|
|
du -sh $BACKUP_NAME/*
|
||
|
|
fi
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// // 确认更新
|
||
|
|
// stage("Confirm Tips"){
|
||
|
|
// steps {
|
||
|
|
// echo "Attention: Update Project - Administrator Decide Update This Project!"
|
||
|
|
// }
|
||
|
|
// input {
|
||
|
|
// message "Next Process Will Update Project, Continue?"
|
||
|
|
// ok "Yes, Do It."
|
||
|
|
// }
|
||
|
|
// }
|
||
|
|
|
||
|
|
stage("Update Server") {
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
echo "Update_Ebin: $Update_Ebin"
|
||
|
|
echo "Update_Slotmap: $Update_Slotmap"
|
||
|
|
echo "Update_Gamealgo: $Update_Gamealgo"
|
||
|
|
echo "Build_Options: $Build_Options"
|
||
|
|
echo "SERVER_DIR: $SERVER_DIR"
|
||
|
|
echo "SLOTMAP_DIR: $MAP_DIR"
|
||
|
|
echo "EBIN_DIR: $EBIN_DIR"
|
||
|
|
echo "GAMEALGO_DIR: $GAMEALGO_DIR"
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
cd $SSH_REMOTE_PUSH_DIR/$GIT_CLONE_DIR
|
||
|
|
pwd
|
||
|
|
if [[ $Update_Ebin == true ]]
|
||
|
|
then
|
||
|
|
echo update ebin
|
||
|
|
/usr/bin/cp -r ./server/ebin/* $EBIN_DIR/
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ $Update_Slotmap == true ]]
|
||
|
|
then
|
||
|
|
echo update slotmap
|
||
|
|
/usr/bin/cp -r ./slotmap/* $MAP_DIR/
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ $Update_Gamealgo == true ]]
|
||
|
|
then
|
||
|
|
echo update gamealgo
|
||
|
|
/usr/bin/cp -r ./server/gamealgo/* $GAMEALGO_DIR/
|
||
|
|
fi
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
stage("Command Server") {
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
echo "Build_Options: $Build_Options"
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
cd $SERVER_DIR
|
||
|
|
[ -f game_ctl.sh ] && echo "Use Command"
|
||
|
|
case $Build_Options in
|
||
|
|
"Hot")
|
||
|
|
echo Use Hot
|
||
|
|
./game_ctl.sh reload_all 1
|
||
|
|
;;
|
||
|
|
"Restart")
|
||
|
|
echo Use Restart
|
||
|
|
./game_ctl.sh stop 1
|
||
|
|
sleep 30
|
||
|
|
./game_ctl.sh start 1
|
||
|
|
;;
|
||
|
|
"Add")
|
||
|
|
echo Use Add
|
||
|
|
./game_ctl.sh reload_all 1
|
||
|
|
sleep 10
|
||
|
|
./game_ctl.sh add_slot 1
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
return 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
post {
|
||
|
|
success{
|
||
|
|
// echo "Success"
|
||
|
|
sh "/usr/local/sbin/python3 ~/scripts/notify_server.py finish success ${PROJECT_NAME} $Build_Options"
|
||
|
|
}
|
||
|
|
failure {
|
||
|
|
// echo "Failure"
|
||
|
|
sh "/usr/local/sbin/python3 ~/scripts/notify_server.py finish failure ${PROJECT_NAME} $Build_Options"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|