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'" } } }