当前位置: 首页 > news >正文

持续集成交付CICD:Jenkins流水线实现Nexus制品晋级策略

目录

一、理论

1.开发测试运维环境

二、实验

1.Nexus制品晋级策略


一、理论

1.开发测试运维环境

(1)环境

1)持续集成开发环境(DEV: Development Environment)
直接通过源代码编译打包,其会跑单元测试,服务API自动化测试,服务UI自动化测试2)测试环境(Test: Test Environment)
部署带版本的组件,服务API自动化测试,服务UI自动化测试3)系统集成环境(SIT, System Integration Test Environment)
部署带版本的组件,服务API自动化测试,服务UI自动化测试,多系统集成API测试,多系统集成UI自动化测试。4)用户可接受性测试环境(UAT, User acceptance Test Environment)
部署带版本的组件,此环境主要用来进行软件产品的验收,用户(客户方)会直接参与,用户根据需求功能文档进行验收,当然在用户验收前可以可以跑API自动化测试和UI自动化测试。此外根据客户项目合同要求,可能需要出具可接受性测试报告:包括但不限于,功能性测试报告,安全测试报告,性能测试报告等5)预生产环境(STAGING, Staging Environment)
部署带版本的组件,一般在直接上生产环境之前,会进行一些基本健康测试[自动或者手工],有的时候还会进行模拟生产环境的真实数据进行Dry Run,其Dry Run很多时候都是在正常生产环境的配置和网络条件下进行的,Dry Run之后,没有问题了,就会把预生产环境切换回来,或者直接上生产环境; 从预生产环境集群切换到生产环境集群的方法有: 蓝绿部署,A/B测试,金丝雀部署【灰度发布】等方法。6)生产环境(Prod: Production Environment)
部署带版本的组件,正式生产环境。7)灾备环境(DR: Disaster Recovery Environment)
部署带版本的组件,对于一些服务可用性,可连续性有特别要求,比如关系到国计民生的系统,需要进行灾备。

二、实验

1.Nexus制品晋级策略

(1)策略

dev > uat
uat > stag
stag > prod

(2)新建流水线

(3)添加参数

(4)查看效果

(5)选择raw(hosted)仓库

(6)创建

(7)完成创建

(8)修改流水线代码

currentBuild.description = "trigger by ${params.updatePolicy}"
pipeline {agent {label "build"}stages {stage("PullArtifact") {steps {script {env.version = "${params.artifactUrl}".split('/')[-2]env.appName = "${params.artifactUrl}".split('/')[-3]env.buName = "${params.artifactUrl}".split('/')[-4]env.pkgName = "${params.artifactUrl}".split('/')[-1]sh """curl ${params.artifactUrl} -o ${env.pkgName} -u admin:Admin123"""}}}stage("UpdateArtifact") {steps {script {switch ("${params.updatePolicy}") {case "dev>uat":repoName = "david-uat"targetDir = "${env.buName}/${env.appName}/${env.version}/"PushRawArtifacts(repoName, targetDir, "./", "${env.pkgName}")break;case "uat>stag":repoName = "david-stag"targetDir = "${env.buName}/${env.appName}/${env.version}/"PushRawArtifacts(repoName, targetDir, "./", "${env.pkgName}")break;case "stag>prod":repoName = "david-prod"targetDir = "${env.buName}/${env.appName}/${env.version}/"PushRawArtifacts(repoName, targetDir, "./", "${env.pkgName}")break;default:println("xxxxxxxxx")}}}}}
}//上传制品def PushRawArtifacts(repoName,targetDir, filePath, pkgName ){withCredentials([usernamePassword(credentialsId: '318df1ad-083b-4158-ac88-2f584446563e', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {sh """curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=${repoName}" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=${targetDir}" \-F "raw.asset1=@${filePath}/${pkgName};type=application/java-archive" \-F "raw.asset1.filename=${pkgName}" \-u "${USER}":"${TOKEN}""""}}

(9)开始构建(dev>uat)

(10)查看日志

(11)查看Nexus

(12)开始构建(uat>stag)

(13)查看日志

(14)Nexus查看

(15)开始构建(stag>prod)

(16) 查看日志

(17)Nexus查看

相关文章:

  • python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)
  • 2023济南大学acm新生赛题解
  • android-xml语法
  • go-fastfds部署心得
  • 办公word-从不是第一页添加页码
  • this.$emit(‘update:isVisible‘, false)作用
  • 使用脚手架创建项目并为拆分页面各自的组件(Web3项目二实战之一)
  • 半导体划片机助力氧化铝陶瓷片切割:科技与工艺的完美结合
  • 科幻未来HUD人工智能科技数据图表仪表盘UI界面AI矢量设计素材图
  • 记录一次云原生线上服务数据迁移全过程
  • 【electron】外语函数接口 FFI
  • 前端开发tips
  • 〖大前端 - 基础入门三大核心之JS篇㊿〗- 面向对象之对象的方法、遍历、深浅克隆
  • 使用postman做接口测试
  • 30 张图解 HTTP 常见的面试题
  • Apache Spark Streaming 使用实例
  • echarts花样作死的坑
  • Fundebug计费标准解释:事件数是如何定义的?
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript 一些 DOM 的知识点
  • PHP CLI应用的调试原理
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Vue--数据传输
  • 给github项目添加CI badge
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 无服务器化是企业 IT 架构的未来吗?
  • 优秀架构师必须掌握的架构思维
  • Android开发者必备:推荐一款助力开发的开源APP
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (¥1011)-(一千零一拾一元整)输出
  • (02)vite环境变量配置
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)JAVA使用POI操作excel
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (含答案)C++笔试题你可以答对多少?
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (十一)c52学习之旅-动态数码管
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原創) 未来三学期想要修的课 (日記)
  • (转)VC++中ondraw在什么时候调用的
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net framework4与其client profile版本的区别
  • .NET Standard 的管理策略
  • .NET程序员迈向卓越的必由之路
  • .net的socket示例
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .net中我喜欢的两种验证码
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @RunWith注解作用
  • @SuppressWarnings(unchecked)代码的作用
  • [ C++ ] STL---string类的模拟实现