m-shell-scripts/m_xjj_1/jenkins_pipeline/client_update_example.jenkinsfile

174 lines
8.1 KiB
Plaintext
Raw Normal View History

2025-03-19 17:38:46 +08:00
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'"
}
}
}