Jenkinsfile 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. pipeline{
  2. agent any
  3. //node {
  4. //customWorkspace '' //自定义工作空间
  5. //}
  6. parameters{
  7. choice(
  8. name: 'branchName',
  9. choices: ['saas-feature-dev','saas-inner-dev'],
  10. description: '请选择你要发布的分支名称'
  11. )
  12. choice(
  13. name: 'mode',
  14. choices: ['deploy','rollback'],
  15. description: '请选择发布或者回滚?注意:回滚到最近成功构建的版本。'
  16. )
  17. }
  18. environment{
  19. CI = "true"
  20. JAR_NAME = "platomix-gmetry-etl"
  21. PROJECT_NAME = "platomix-gmetry-etl"
  22. PACKAGE_PROJECT_FILE = "${env.WORKSPACE}\\target\\${JAR_NAME}.jar"
  23. PROJECT_FOLDER = "C:\\platomix\\projects\\${JAR_NAME}"
  24. RUN_PROJECT_FILE = "${PROJECT_FOLDER}\\${JAR_NAME}.jar"
  25. BAK_PROJECT_FILE = "${PROJECT_FOLDER}\\bak\\${JAR_NAME}-bak.jar"
  26. PROJECT_LOG_FOLDER = "${PROJECT_FOLDER}\\logs"
  27. MAVEN_HOME = "C:\\platomix\\component\\apache-maven-3.6.3"
  28. GIT_HOME = "C:\\platomix\\component\\git-2.12.0.2"
  29. }
  30. options{
  31. timestamps() //日志时间
  32. disableConcurrentBuilds() //禁止并行
  33. timeout(time: 30, unit: 'MINUTES') //流水线的超时时间设置30分钟
  34. }
  35. //triggers{}
  36. stages {
  37. stage("初始准备"){
  38. steps {
  39. echo "1.项目名称: ${env.JAR_NAME}"
  40. echo "2.项目目录: ${env.PROJECT_FOLDER}"
  41. echo "3.项目备份文件: ${env.BAK_PROJECT_FILE}"
  42. echo "清理临时文件目录开始.."
  43. script{
  44. try{
  45. dir("${env.WORKSPACE}@tmp") {
  46. deleteDir()
  47. }
  48. dir("${env.WORKSPACE}@script") {
  49. deleteDir()
  50. }
  51. dir("${env.WORKSPACE}@script@tmp") {
  52. deleteDir()
  53. }
  54. cleanWs() //删除${WORKSPACE}目录
  55. }catch(err){}
  56. }
  57. echo "清理临时文件目录结束.."
  58. }
  59. }
  60. stage("拉取代码"){
  61. when {
  62. environment name: 'mode',value: 'deploy'
  63. }
  64. steps {
  65. echo "开始拉取代码,当前分支:${params.branchName}"
  66. git branch: "${params.branchName}", credentialsId: 'f14bc12d-2f9c-4227-92cc-9b4d41a1ebac', url: 'http://git.platomix.net/aokunsang/platomix-gmetry-etl.git'
  67. }
  68. }
  69. stage("编译打包"){
  70. when {
  71. environment name: 'mode',value: 'deploy'
  72. }
  73. steps {
  74. echo "开始构建项目,构建BuildNumber:${env.BUILD_NUMBER}"
  75. bat "${env.MAVEN_HOME}\\bin\\mvn clean package -e -U -Dmaven.test.skip=true"
  76. }
  77. }
  78. stage("代码质量检测"){
  79. when {
  80. environment name: 'mode',value: 'deploy'
  81. }
  82. steps {
  83. withSonarQubeEnv(installationName: 'sonar-scanner') {
  84. bat "${env.MAVEN_HOME}\\bin\\mvn sonar:sonar -DskipTests"
  85. }
  86. }
  87. }
  88. stage("代码质量结果"){
  89. when {
  90. environment name: 'mode',value: 'deploy'
  91. }
  92. steps {
  93. timeout(time: 1, unit: 'HOURS') {
  94. waitForQualityGate abortPipeline: true
  95. }
  96. }
  97. }
  98. stage("停止服务"){
  99. steps {
  100. script{
  101. try{
  102. bat "${env.PROJECT_FOLDER}\\stop.bat"
  103. }catch(err){}
  104. }
  105. echo "停止服务完成!"
  106. }
  107. }
  108. stage("JAR包备份"){
  109. when {
  110. environment name: 'mode',value: 'deploy'
  111. }
  112. steps {
  113. script{
  114. def projectFile = "${env.RUN_PROJECT_FILE}"
  115. if(fileExists(projectFile) == true){
  116. bat "move ${projectFile} ${env.BAK_PROJECT_FILE}"
  117. }
  118. bat "move ${env.PACKAGE_PROJECT_FILE} ${projectFile}"
  119. }
  120. }
  121. }
  122. stage("代码回滚"){
  123. when {
  124. environment name: 'mode',value: 'rollback'
  125. }
  126. steps {
  127. echo '开始回滚代码...'
  128. script {
  129. def rollbackFile = "${env.BAK_PROJECT_FILE}"
  130. if(fileExists(rollbackFile) == true){
  131. bat "echo f | xcopy ${rollbackFile} ${env.RUN_PROJECT_FILE} /y"
  132. echo "代码回滚已完成!"
  133. }else {
  134. error("代码回滚失败,暂无备份JAR包。")
  135. }
  136. }
  137. }
  138. }
  139. stage("启动服务"){
  140. steps {
  141. echo "正在启动服务,请稍等..."
  142. script{
  143. try{
  144. bat "call ${env.PROJECT_FOLDER}\\start.bat"
  145. sleep(time:5, unit:"SECONDS")
  146. timeout(time: 15, unit: 'SECONDS'){
  147. bat "${env.GIT_HOME}\\usr\\bin\\tail -f ${PROJECT_LOG_FOLDER}\\info.log"
  148. }
  149. }catch(err){}
  150. }
  151. echo "启动服务完成!"
  152. }
  153. }
  154. }
  155. post{
  156. always {
  157. echo "always"
  158. }
  159. success {
  160. script {
  161. try{
  162. bat "taskkill /f /im tail.exe"
  163. }catch(err){}
  164. currentBuild.description = "构建成功!";
  165. }
  166. }
  167. failure {
  168. script {
  169. currentBuild.description = "构建失败!";
  170. }
  171. }
  172. aborted {
  173. script {
  174. currentBuild.description = "构建取消!";
  175. }
  176. }
  177. }
  178. }