目錄
一、理論
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查看