174 lines
8.1 KiB
Plaintext
174 lines
8.1 KiB
Plaintext
|
|
pipeline {
|
||
|
|
agent {
|
||
|
|
label "master_node"
|
||
|
|
}
|
||
|
|
// parameters {
|
||
|
|
// string(name: 'BACKUP_TAG', defaultValue: '', description: 'This Parameter Decide Backup Version!')
|
||
|
|
// }
|
||
|
|
environment {
|
||
|
|
// 以年-月-日_时-分-秒生成备份版本号
|
||
|
|
BACKUP_TAG = "${new Date().format('yyyy-MM-dd_HH-mm-ss')}"
|
||
|
|
GIT_REPO_URL = '192.168.160.39/client/wc-client-update.git'
|
||
|
|
GIT_BRANCH = 'main'
|
||
|
|
GIT_CREDENTIALS_ID = "ad8c7b4a-9de5-4380-8110-94d35b68c969"
|
||
|
|
GIT_CLONE_DIR = "wc_client_update"
|
||
|
|
BUILD_UNZIP_FILE = "wc_client_update.tgz"
|
||
|
|
SSH_REMOTE_USER = "cicd"
|
||
|
|
SSH_REMOTE_HOST = "127.0.0.1"
|
||
|
|
SSH_REMOTE_PORT = 22229
|
||
|
|
// 远端的更新包上传目录
|
||
|
|
SSH_REMOTE_PUSH_DIR = "~/update/"
|
||
|
|
|
||
|
|
// 远端的项目更新的父目录
|
||
|
|
SSH_REMOTE_PROJECT_PARENT_DIR = "/data/code"
|
||
|
|
|
||
|
|
// 远程的项目更新目录(只能输入文件夹名字, 不然会报错)
|
||
|
|
SSH_REMOTE_PROJECT_DIR = "client"
|
||
|
|
}
|
||
|
|
stages {
|
||
|
|
// 从git获取最新代码
|
||
|
|
stage("Git Code"){
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
echo "Attention: Git Code - I Will Start!"
|
||
|
|
sh "/usr/local/sbin/python3 ~/scripts/notify.py 'start' '${env.GIT_BRANCH}' '${env.GIT_COMMITTER_NAME}' '${env.GIT_COMMIT_MESSAGE}' '${env.GIT_COMMIT}' '${env.GIT_PROJECT_NAME}' 'null'"
|
||
|
|
// sh "/usr/bin/python3.6 ~/scripts/notify_lark.py 'start' ${env.GIT_BRANCH}' '${env.GIT_COMMITTER_NAME}' '${env.GIT_COMMIT_MESSAGE}' '${env.GIT_COMMIT}' '${env.GIT_PROJECT_NAME}' 'null'"
|
||
|
|
// 从凭据中获取密码
|
||
|
|
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 Code - I Finish!"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
// 创建更新压缩包
|
||
|
|
stage("Build Package") {
|
||
|
|
steps {
|
||
|
|
script {
|
||
|
|
echo "Attention: Build Package - I Will Start!"
|
||
|
|
if (fileExists(BUILD_UNZIP_FILE)) {
|
||
|
|
echo "Attention: Build Package - I Will Remove Old Package!"
|
||
|
|
// 删除旧文件
|
||
|
|
sh "rm -rf $BUILD_UNZIP_FILE"
|
||
|
|
}
|
||
|
|
// 压缩文件 排除.Git目录
|
||
|
|
sh "tar czf ${BUILD_UNZIP_FILE} ./${GIT_CLONE_DIR} --exclude=.git"
|
||
|
|
sh "ls -lh ${BUILD_UNZIP_FILE}"
|
||
|
|
echo "Attention: Build Package - I Finish!"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
// 上传更新压缩包
|
||
|
|
stage("Push File") {
|
||
|
|
steps {
|
||
|
|
echo "Attention: Push File - I Will Start!"
|
||
|
|
// echo "i want mkdir wc_client_update_${BACKUP_TAG}"
|
||
|
|
echo "Attention: Call Backup Process - You Must Remember BACKUP_TAG is ${BACKUP_TAG}!"
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
[ -d ${SSH_REMOTE_PUSH_DIR} ] || mkdir -p ${SSH_REMOTE_PUSH_DIR}
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
|
||
|
|
sh "scp -P${SSH_REMOTE_PORT} ${BUILD_UNZIP_FILE} ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST}:${SSH_REMOTE_PUSH_DIR}/"
|
||
|
|
echo "Attention: Push File - I Finish"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
// 更新前的操作 包括备份等
|
||
|
|
stage("Pre Update") {
|
||
|
|
steps {
|
||
|
|
echo "Attention: Pre Update: I Will Start!"
|
||
|
|
echo "Attention: Answer Previous Process - I Remember BACKUP_TAG!"
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
cd ${SSH_REMOTE_PUSH_DIR}
|
||
|
|
[ -d ${GIT_CLONE_DIR} ] && mv ${GIT_CLONE_DIR} ${GIT_CLONE_DIR}_${BACKUP_TAG}
|
||
|
|
tar xf ${BUILD_UNZIP_FILE}
|
||
|
|
rm -rf ${BUILD_UNZIP_FILE}
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
echo "Attention: Pre Update: I Finish"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
stage("Pause Process"){
|
||
|
|
steps {
|
||
|
|
echo "Please Let The Admin Check Update Dir = ${SSH_REMOTE_PROJECT_PARENT_DIR}/${SSH_REMOTE_PROJECT_DIR}!"
|
||
|
|
echo "Attention: Pause Process - Please Let The Admin Decide Update Or Not!"
|
||
|
|
echo "Attention Attention Attention: Next Process Will Handle Remote Host! "
|
||
|
|
}
|
||
|
|
}
|
||
|
|
// // 确认更新
|
||
|
|
// 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 Project") {
|
||
|
|
steps {
|
||
|
|
echo "Attention: Update Project - I Will Start!"
|
||
|
|
sh """
|
||
|
|
ssh ${SSH_REMOTE_USER}@${SSH_REMOTE_HOST} -p${SSH_REMOTE_PORT} '
|
||
|
|
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}
|
||
|
|
/usr/bin/cp -r ${SSH_REMOTE_PUSH_DIR}/${GIT_CLONE_DIR}/* ${SSH_REMOTE_PROJECT_DIR}/
|
||
|
|
'
|
||
|
|
"""
|
||
|
|
echo "Attention: Update Project - I Finish!"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
// 清楚缓存
|
||
|
|
stage("Flush CDN") {
|
||
|
|
steps {
|
||
|
|
echo "Attention: Flush CDN - I Will Start!"
|
||
|
|
sh """
|
||
|
|
cd ~/scripts/
|
||
|
|
bash flush_wc_cdn.sh
|
||
|
|
"""
|
||
|
|
echo "Attention: Flush CDN - I Finish"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 结束更新
|
||
|
|
stage("Finish Pipeline") {
|
||
|
|
steps {
|
||
|
|
echo "Notify All Processes!"
|
||
|
|
echo "This Pipeline Has Been Completed!"
|
||
|
|
echo "And We Look Forward To Continuing Cooperation Next Time!"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
post {
|
||
|
|
success{
|
||
|
|
// echo "Success"
|
||
|
|
sh "/usr/local/sbin/python3 ~/scripts/notify.py 'finish' '${env.GIT_BRANCH}' '${env.GIT_COMMITTER_NAME}' '${env.GIT_COMMIT_MESSAGE}' '${env.GIT_COMMIT}' '${env.GIT_PROJECT_NAME}' 'success'"
|
||
|
|
// sh "/usr/local/sbin/python3 ~/scripts/notify_lark.py 'finish' '${env.GIT_BRANCH}' '${env.GIT_COMMITTER_NAME}' '${env.GIT_COMMIT_MESSAGE}' '${env.GIT_COMMIT}' '${env.GIT_PROJECT_NAME}' 'success'"
|
||
|
|
}
|
||
|
|
failure {
|
||
|
|
// echo "Failure"
|
||
|
|
sh "/usr/local/sbin/python3 ~/scripts/notify.py 'finish' '${env.GIT_BRANCH}' '${env.GIT_COMMITTER_NAME}' '${env.GIT_COMMIT_MESSAGE}' '${env.GIT_COMMIT}' '${env.GIT_PROJECT_NAME}' 'failure'"
|
||
|
|
// sh "/usr/local/sbin/python3 ~/scripts/notify_lark.py 'finish' '${env.GIT_BRANCH}' '${env.GIT_COMMITTER_NAME}' '${env.GIT_COMMIT_MESSAGE}' '${env.GIT_COMMIT}' '${env.GIT_PROJECT_NAME}' 'failure'"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|