电商风控系统(flink+groovy+flume+kafka+redis+clickhouse+mysql)

一.项目概览

电商的防止薅羊毛的风控系统

需要使用 groovy 进行风控规则引擎的编写 然后其它技术进行各种数据的 存储及处理

 薅羊毛大致流程

如果单纯使用 if else在业务代码中进行风控规则的编写 那么 维护起来会比较麻烦 并且跟业务系统强绑定不合适  所以一般独立成一个单独的系统

常见风控规则列举

风控引擎设计的核心点

业务逻辑概览

 事件接入中心

技术架构

分层

各单位占比

二.flink常见知识点实战

从下图可以看出 跟之前yarn类似 还是有管理 有大领导 校领导 打工人 打工人来执行任务

分别对应 jobmamager taskmanager taskslot 由 taskslot 执行任务 每个

def task_dir = '/opt/jenkins/workspace/${JOB_NAME}/tasks' def code_dir = '/opt/jenkins/workspace/${JOB_NAME}' def env_name = 'DaYu_1+1+3' pipeline{ agent{ node{ label 'ansible-agent-test' } } parameters { choice( description: 'canBeModifyByXingyun,Release version', name: 'release_version', choices:['iMasterDaYuV200R023C10','iMasterDaYuV200R023C30','iMasterDaYuV200R024C00','iMasterDaYuV200R024C10','iMasterDaYuV200R025C00','iMasterDaYuV200R026C00'] ) string( description: 'canBeModifyByXingyun,CloudSOP version', name: 'version', defaultValue:'V100R023C00SPC410B030', ) string( description: 'canBeModifyByXingyun,uniep_version', name: 'uniep_version', defaultValue:'V100R023C00', ) string( description: 'canBeModifyByXingyun,DaYu version', name: 'DaYu_version', defaultValue:'V200R023C30B018', ) choice( description: 'canBeModifyByXingyun,下载大禹包时是否指定下载其Suse12版本,如果是,选择true;默认false,下载euler版本', name: 'is_Suse_pkg', choices:['false','true'] ) string( description: 'canBeModifyByXingyun,FI 版本号,R23C10和C30所有版本固定填 V100R021C10B022, R24的版本填大禹的版本号', name: 'fi_version', defaultValue: 'V100R021C10B022', ) choice( description: 'canBeModifyByXingyun,大禹取包地址', name: 'DaYu_cmc_path', choices: ['CloudSOP','DaYu'] ) string( description: 'canBeModifyByXingyun,DaYu测试包版本,默认:V200R024C10SPC100B004', name: 'Test_Package_version', defaultValue:'V200R024C10SPC100B004', ) string( description: 'canBeModifyByXingyun,产品名称', name: 'Product_Scene', defaultValue: 'NCE', ) choice( description: 'canBeModifyByXingyun,是否安装大禹测试服务,true:安装,false:不安装', name: 'DaYu_Test', choices:['false','true'] ) choice( description: 'canBeModifyByXingyun,是否是否绿区机器', name: 'is_green', choices:['false','true'] ) choice( description: 'canBeModifyByXingyun,安装模式: install为安装, upgrade为升级, rollback为回滚', name: 'way', choices:['install','upgrade2','rollback','dayuDRPreOperation'] ) choice( description: 'canBeModifyByXingyun,升级模式: 一段式升级, 二段式升级 默认为二段式', name: 'upgradeMethod', choices:['Two-stage-upgrade','One-stage-upgrade'] ) choice( description: 'canBeModifyByXingyun,秘钥开关,KMC | CloudSOP | Cipher', name: 'cipherMode', choices:['KMC','CloudSOP','Cipher'] ) choice( description: 'canBeModifyByXingyun,操作内容:服务启动策略,默认为AUTO', name: 'startupPolicy', choices: ['AUTO','MANUAL'], ) string( description: 'canBeModifyByXingyun,【必填】管理节点IP', name: 'Management_ip', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【选填】管理节点IP6地址,如无需要,默认为空即可', name: 'Managementipv6', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】业务节点IP', name: 'Business_ip', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】业务节点IP6地址,如无需要,默认为空即可', name: 'Businessipv6', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】FI01', name: 'FI01_ip', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】FI01节点IP6地址,如无需要,默认为空即可', name: 'FI01ipv6', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】FI02', name: 'FI02_ip', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】FI02节点IP6地址,如无需要,默认为空即可', name: 'FI02ipv6', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】FI03', name: 'FI03_ip', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【必填】FI03节点IP6地址,如无需要,默认为空即可', name: 'FI03ipv6', defaultValue: '', ) choice( description: 'canBeModifyByXingyun,是否快速升级回滚,选择true升级回滚时不带备份恢复、添加节点、上传升级数据', name: 'isQuickUpgradeRollback', choices: ['false','true'] ) choice( description: 'canBeModifyByXingyun,是否跳过下载包阶段,选择true跳过下载(仅下载成功,安装失败时可选)', name: 'ignore_download', choices: ['false','true'] ) choice( description: 'canBeModifyByXingyun,是否预置数据(安装、升级时选true可预置数据,回滚时选true会删除Phoenix表)', name: 'presetData', choices: ['false', 'true'] ) string( description: 'canBeModifyByXingyun,FTP服务器IP. 配置当前环境节点, 则为适配服务部署的节点IP(NMS节点); 配置为三方节点, 需保证备份路径存在', name: 'ftp_serverip', defaultValue: '', ) string( description: 'canBeModifyByXingyun,FTP服务器ftpuser明文密码', name: 'ftp_passwd', defaultValue: 'Changeme_123', ) string( description: 'canBeModifyByXingyun,FTP备份路径, FTP服务器配置当前环境适配服务部署的节点IP(NMS节点), 默认为ftproot/backup; 配置为三方节点, 需保证备份路径存在', name: 'ftp_backuppath', defaultValue: 'ftproot/backup', ) choice( description: 'canBeModifyByXingyun,Uniep中英文部署选择', name: 'lang', choices:['zh_CN','en_US'], ) choice( description: 'canBeModifyByXingyun,是否安装sop产品', name: 'install_sop_product', choices:['true','false'], ) choice( description: 'canBeModifyByXingyun,是否安装大禹', name: 'install_dayu', choices:['true','false'], ) choice( description: 'canBeModifyByXingyun,大禹部署模板', name: 'dayu_install_template', choices:['NCE-Bigdata','NCE-Bigdata-Hbase','NCE-Bigdata-Redis','NCE-Bigdata-Single'], ) string( description: 'canBeModifyByXingyun,realm_name', name: 'realm_name', defaultValue: 'MYTEST', ) choice( description: 'canBeModifyByXingyun,ossadm/ossuser用户是否使用复杂密码', name: 'isComplexPwd', choices:['false','true'] ) string( description: 'canBeModifyByXingyun,输入ossadm/ossuser用户复杂密码', name: 'complex_pwd', defaultValue: 'Changeme_123' ) choice( description: 'canBeModifyByXingyun,是否开启大数据组件用户管理菜单', name: 'is_show_usermgmt', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性NCE-Bigdata-Hbase是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_Hbase', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性NCE-Bigdata-Redis是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_Redis', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性flink是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_Flink', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性FTP是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_FTP', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性Ranger是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_Ranger', choices:['false','true'] ) choice( description: 'canBeModifyByXingyun,大禹特性ClickHouse是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_ClickHouse', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性Flume是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_Flume', choices:['false','true'] ) choice( description: 'canBeModifyByXingyun,大禹特性ES是否安装,true:安装,false:不安装[如不清楚如何选择,按默认即可]', name: 'NCE_Bigdata_ES', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性StarRocks是否安装,true:安装,false:不安装[仅R25版本生效]', name: 'NCE_Bigdata_StarRocks', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性Zookeeper是否安装,true:安装,false:不安装[仅R25版本生效]', name: 'NCE_Bigdata_Zookeeper', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性YARN是否安装,true:安装,false:不安装[仅R25版本生效]', name: 'NCE_Bigdata_YARN', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性HDFS是否安装,true:安装,false:不安装[仅R25版本生效]', name: 'NCE_Bigdata_HDFS', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性Hive是否安装,true:安装,false:不安装[仅R25版本生效]', name: 'NCE_Bigdata_Hive', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性Spark是否安装,true:安装,false:不安装[仅R25版本生效]', name: 'NCE_Bigdata_Spark', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,大禹特性Kafka是否安装,true:安装,false:不安装[仅R25版本生效]', name: 'NCE_Bigdata_Kafka', choices:['true','false'] ) choice( description: 'canBeModifyByXingyun,可选组件随机安装,选true后上面可选组件全不生效,不能与SparkLocal模式同时安装', name: 'randomService', choices: ['false','true'] ) choice( description: 'canBeModifyByXingyun,是否开启故障注入.默认值为 false', name: 'fault_inject_dayu', choices: ['false','true'], ) choice( description: 'canBeModifyByXingyun,网管安装路径', name: 'INSTALL_ROOT', choices: ['/opt/oss','/opt/cloud'] ) choice( description: 'canBeModifyByXingyun,定制share路径', name: 'sharepath', choices: ['/opt/oss/share','/var/share/oss','/var/share','/export/home/ossshare','/opt/ossshare','/custom/share','/opt/share/oss','/opt/share'] ) choice( description: 'canBeModifyByXingyun,定制log目录', name: 'logpath', choices: ['/opt/oss/log','/var/log/oss','/var/log','/export/home/osslog','/custom/log','/opt/log/oss','/opt/osslog'] ) choice( description: 'canBeModifyByXingyun,定制tmp目录', name: 'tmppath', choices: ['/opt/oss/tmp','/var/tmp','/tmp/oss','/tmp/oss','/custom/tmp','/tmp/opt/oss'] ) choice( description: 'canBeModifyByXingyun,安装模式: false 普通安装模式[不做容灾的,选false] || true 容灾安装[会进行大禹包定制与容灾前置操作]', name: 'dayuDR', choices:['false','true'] ) choice( description: 'canBeModifyByXingyun,是否定制多个目录及student表,false创建2个目录10个表', name: 'isCustomDR', choices:['false','true'] ) string( description: 'canBeModifyByXingyun,【选填】集群容灾场景,填写对端站点的0号fi节点ip', name: 'peerSiteFI01', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【选填】集群容灾场景,填写对端站点的1号fi节点ip', name: 'peerSiteFI02', defaultValue: '', ) string( description: 'canBeModifyByXingyun,【选填】集群容灾场景,填写对端站点的2号fi节点ip', name: 'peerSiteFI03', defaultValue: '', ) } stages{ stage('generate task info'){ steps{ script{ sh """ mkdir -p ${task_dir}/${BUILD_NUMBER} touch ${task_dir}/${BUILD_NUMBER}/env.ini echo "JOB_NAME=${JOB_NAME}">> ${task_dir}/${BUILD_NUMBER}/env.ini """ params.each {param -> if (param.toString().contains('_ip')){ sh """ set +x echo "${param.key}" if [ -z "`grep --no-filename ${param.value} /opt/public/*.cfg | awk 'END {print}'`" ]; then exit 1 else echo `grep --no-filename ${param.value} /opt/public/*.cfg | awk 'END {print}'` >> ${task_dir}/${BUILD_NUMBER}/hosts.cfg fi echo "[${param.key}]" >> ${task_dir}/${BUILD_NUMBER}/hosts >> ${task_dir}/${BUILD_NUMBER}/hosts echo "${param.value}" >> ${task_dir}/${BUILD_NUMBER}/hosts >> ${task_dir}/${BUILD_NUMBER}/hosts echo "${param.key}=${param.value}" >> ${task_dir}/${BUILD_NUMBER}/env.ini """ }else if (param.toString().contains('Nodes')){ if(!param.value.toString().isEmpty()){ sh """ echo "${param.key}=${param.value}" >> ${task_dir}/${BUILD_NUMBER}/env.ini """ String[] array=param.value.toString().split(','); def nodes = [:] for(int i= 0;i<array.length;i++){ nodes[i] = array[i] } nodes.each {node -> sh """ echo "${node.key}" if [ -z "`grep --no-filename ${node.value} /opt/public/*.cfg | awk 'END {print}'`" ]; then exit 1 else echo `grep --no-filename ${node.value} /opt/public/*.cfg | awk 'END {print}'` >> ${task_dir}/${BUILD_NUMBER}/hosts.cfg fi echo "[${node.key}]" >> ${task_dir}/${BUILD_NUMBER}/hosts >> ${task_dir}/${BUILD_NUMBER}/hosts echo "${node.value}" >> ${task_dir}/${BUILD_NUMBER}/hosts >> ${task_dir}/${BUILD_NUMBER}/hosts echo "${node.key}=${node.value}" >> ${task_dir}/${BUILD_NUMBER}/env.ini """ } } } else{ sh """ echo "${param.key}=${param.value}" >> ${task_dir}/${BUILD_NUMBER}/env.ini """ } } } } } // 以下为安装流程 stage('安装初始化节点, 安装欧方'){ when { anyOf { environment name: 'way', value: 'install' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/initnodenaie.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('获取安装配置'){ when { anyOf { environment name: 'way', value: 'install' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/getconfigs.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('下载安装包'){ when { anyOf { environment name: 'way', value: 'install' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/getPackagesnaie.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('exec ansible preparedayu'){ when { anyOf { environment name: 'way', value: 'install' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/preparedayu.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('exec ansible installmanager'){ when { environment name: 'way', value: 'install' } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/installmanager.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('exec ansible addnodes'){ when { anyOf { environment name: 'way', value: 'install' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/addnodes.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('exec ansible scanpackages'){ when { anyOf { environment name: 'way', value: 'install' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/scanpackages.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('exec ansible installproduct_cloudsop'){ when { environment name: 'way', value: 'install' } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/installproduct_cloudsop.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('备份前置动作'){ when { anyOf { environment name: 'way', value: 'install' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore_pre.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=copy_files" """ } } stage('安装后预置数据'){ when { allOf { environment name: 'way', value: 'install' environment name: 'presetData', value: 'true' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/presetData.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } // 以上为安装流程 // 以下为升级流程 stage('升级前初始化'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/initnode_upgrade_cmc.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('获取升级配置'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/getconfigs.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('升级前预置数据'){ when { allOf { environment name: 'way', value: 'upgrade2' environment name: 'presetData', value: 'true' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/presetData.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('下载升级包'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/getPackagesnaie.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('扫描升级包'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/scanpackages.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('升级前备份前置动作'){ when { allOf { environment name: 'way', value: 'upgrade2' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=pre_backup" """ } } stage('备份数据库软件'){ when { allOf { environment name: 'way', value: 'upgrade2' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=backup_db_software" """ } } stage('备份管理面'){ when { allOf { environment name: 'way', value: 'upgrade2' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=backup_uniep" """ } } stage('备份产品数据'){ when { allOf { environment name: 'way', value: 'upgrade2' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=backup_product" """ } } stage('管理面任务状态检查'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/operate_omp_schedule_jobs.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=disable" """ } } stage('升级管理面'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/upgrademanager.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('管理面升级后置检查'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/mgr_check.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('升级后备份管理面'){ when { allOf { environment name: 'way', value: 'upgrade2' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=backup_uniep" """ } } stage('添加升级节点'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/addnodes.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } //将升级运维面拆分为三个阶段 // stage('升级运维面数据库'){ // when { // anyOf { // environment name: 'way', value: 'upgrade2' // } // } // steps{ // sh """ // echo hello // ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/upgradezenith.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" // """ // } // } // stage('运维面服务升级第一段'){ // when { // anyOf { // environment name: 'way', value: 'upgrade2' // } // } // steps{ // sh """ // echo hello // ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/upgrade_product_firstphase.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" // """ // } // } stage('升级运维面服务'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/upgradeproduct_cloudsop.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('上传产品升级数据'){ when { allOf { environment name: 'way', value: 'upgrade2' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/upload_product_backup_packsges.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } // stage('运维面服务升级第二段'){ // when { // anyOf { // environment name: 'way', value: 'upgrade2' // } // } // steps{ // sh """ // echo hello // ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/upgrade_product_secondphase.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" // """ // } // } stage('升级后启动产品服务'){ when { anyOf{ environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/operate_app_db.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=start_app" """ } } stage('启用管理面定时任务'){ when { anyOf { environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/operate_omp_schedule_jobs.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=enable" """ } } stage('后置检查'){ when { anyOf{ environment name: 'way', value: 'upgrade2' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/post_check.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } // 以上为升级流程 // 以下为回滚流程 stage('回退欧方'){ when { anyOf { environment name: 'way', value: 'rollback' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/initnode_rollback_cmc.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('获取回滚配置'){ when { anyOf { environment name: 'way', value: 'rollback' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/getconfigs_rollback_cmc.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('回滚运维面'){ when { anyOf { environment name: 'way', value: 'rollback' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/rollbackproduct_cloudsop.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('恢复数据库应用程序'){ when { allOf { environment name: 'way', value: 'rollback' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=restore_db_software" """ } } stage('回滚管理面'){ when { anyOf { environment name: 'way', value: 'rollback' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/rollbackmanager.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir}" """ } } stage('恢复产品升级数据'){ when { allOf { environment name: 'way', value: 'rollback' environment name: 'isQuickUpgradeRollback', value: 'false' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/backup_restore.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=restore_product" """ } } stage('恢复后启动产品服务'){ when { anyOf{ environment name: 'way', value: 'rollback' } } steps{ sh """ echo hello ansible-playbook ${code_dir}/CloudSOP-common/ansible-files/operate_app_db.yml -i ${task_dir}/${BUILD_NUMBER}/hosts --extra-vars "task_id=${BUILD_NUMBER} env_name=${env_name} task_dir=${task_dir} code_dir=${code_dir} operation=start_app" """ } } // 以上为回滚流程 } }
08-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我才是真的封不觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值