...
代码块 | ||||
---|---|---|---|---|
| ||||
// Jenkinsfile (Declarative Pipeline) pipeline { agent any environment { APP_NAME = "agent" APP_ENV = "${APP_NAME}-${ENV}" APP_TAR = "${APP_ENV}.tar.gz" SERVER_CONTAINER = "${APP_ENV}" SERVER_WORKSPACE = "/workspace" SERVER_WORKSPACE_SUB_DIR = "${SERVER_WORKSPACE}/${APP_ENV}" SERVER_SITE_DIR = "/sites/api-${APP_ENV}.scjswk.com/index" LOCAL_SCRIPT = """ #!/bin/bash # 配置环境文件 cp .env.${ENV} .env # 清空仓库里携带的冲突文件,防止覆盖 rm -rf runtime/logs/ rm -rf runtime/log/ rm -rf ${APP_ENV} mkdir ${APP_ENV} shopt -s extglob mv !(${APP_ENV}) .[^.]* ${APP_ENV} # 压缩打包目录 rm -rf ${APP_TAR} tar -czf ${APP_TAR} -C ${APP_ENV} . """ SERVER_SCRIPT = """ #!/bin/bash # 检查变量是否为空 if [ -z "${SERVER_WORKSPACE_SUB_DIR}" ]; then echo "文件夹为空,退出" exit 1 fi if [ -d "${SERVER_WORKSPACE_SUB_DIR}" ]; then echo "${SERVER_WORKSPACE_SUB_DIR} 目录存在" else echo "创建 ${SERVER_WORKSPACE_SUB_DIR}" mkdir ${SERVER_WORKSPACE_SUB_DIR} fi # 停止服务 docker stop ${SERVER_CONTAINER} # 清空旧数据 #cd /sites/${SERVER_FOLDER} #rm -rf * # 解包文件 cd ${SERVER_WORKSPACE} mv ${APP_TAR} ${SERVER_WORKSPACE_SUB_DIR} cd ${SERVER_WORKSPACE_SUB_DIR} tar -zxf ${APP_TAR} cp -r ./ ${SERVER_SITE_DIR} # 启动服务 docker start ${SERVER_CONTAINER} # 重启supervisor supervisorctl restart test_agent_create_qrcode: supervisorctl restart test_agent_reward: supervisorctl restart test_agent_sms_notice: """ } parameters { gitParameter ( description: '请选择版本或分支', branchFilter: 'origin/(.*)', defaultValue: '', name: 'BRANCH_TAG', type: 'PT_BRANCH_TAG', quickFilterEnabled: true, sortMode: 'DESCENDING_SMART' ) choice ( description: '请选择环境', name: 'ENV', choices: ['dev', 'test'] ) } stages { stage('Pipeline Init') { when { expression { env.getProperty('ENV') == null || env.getProperty('BRANCH_TAG') == null } } steps { echo "项目初始化.." } } stage('Zip') { when { expression { env.getProperty('ENV') != null} } steps { script { echo "ENV: ${ENV}" echo "APP_NAME: ${APP_NAME}" echo "APP_ENV: ${APP_ENV}" echo "APP_TAR: ${APP_TAR}" } echo "文件打包中.." sh "${LOCAL_SCRIPT}" } } stage('Deploy:dev') { when { expression { env.getProperty('ENV') != null && ENV == 'dev' } } steps { echo "项目部署中.." sshPublisher(publishers: [sshPublisherDesc(configName: 'jsfk-application', sshCredentials: [encryptedPassphrase: '{AQAAABAAAAAgdPyIjjf2vcK04ARjEMRJQvTLoegYPTjaBoMleHT/5sTO5JeSHyKP1KUfcMaiMGX1}', key: '', keyPath: '', username: 'root'], transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "${SERVER_SCRIPT}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "", remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${APP_TAR}")], usePromotionTimestamp: true, useWorkspaceInPromotion: true, verbose: true)]) } } stage('Deploy:test') { when { expression { env.getProperty('ENV') != null && ENV == 'test' } } steps { echo "项目部署中.." sshPublisher(publishers: [sshPublisherDesc(configName: 'jsfk-application', sshCredentials: [encryptedPassphrase: '{AQAAABAAAAAgdPyIjjf2vcK04ARjEMRJQvTLoegYPTjaBoMleHT/5sTO5JeSHyKP1KUfcMaiMGX1}', key: '', keyPath: '', username: 'root'], transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "${SERVER_SCRIPT}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "", remoteDirectorySDF: false, removePrefix: '', sourceFiles: "${APP_TAR}")], usePromotionTimestamp: true, useWorkspaceInPromotion: true, verbose: true)]) } } } post { success { script { if(env.getProperty('ENV') == null || env.getProperty('BRANCH_TAG') == null){ echo "项目初始化 成功 ^_^" }else{ echo "${APP_ENV} : ${BRANCH_TAG} 部署 成功 ^_^" } } } failure { script { if(env.getProperty('ENV') == null || env.getProperty('BRANCH_TAG') == null){ echo "项目初始化 失败!" }else{ echo "${APP_ENV} : ${BRANCH_TAG} 部署 失败!" } } } } } |
四、项目初始化
进入jenkins项目,点击 【立即构建】 ,后在下方Builds中查看当前构建输出
...