Jenkinsfile 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // 所有脚本命令包含在pipeline{}中
  2. pipeline {
  3. // 指定任务在哪个节点执行(Jenkins支持分布式)
  4. agent any
  5. // 配置全局环境,指定变量名=变量值信息
  6. // environment{
  7. // host = '172.17.1.22'
  8. // }
  9. environment {
  10. // docker的包名
  11. // DOCKER_VERSION = env.BUILD_TAG.replace("%2F","-")
  12. DOCKER_VERSION = "" // 空版本号,由下游任务自动生成
  13. }
  14. options{
  15. disableConcurrentBuilds()
  16. }
  17. parameters {
  18. booleanParam(name: 'auto_run_docker_nginx_build_job', defaultValue: false, description: '自动运行docker构建任务')
  19. booleanParam(name: 'auto_run_docker_nginx_pull_job', defaultValue: false, description: '自动运行docker发布任务')
  20. }
  21. triggers {
  22. GenericTrigger(
  23. genericVariables: [
  24. [key: 'ref', value: '$.ref']
  25. ],
  26. causeString: 'Triggered on $ref',
  27. token: 'android-cloud-h5',
  28. tokenCredentialId: '',
  29. silentResponse: false,
  30. printPostContent: true,
  31. printContributedVariables: true,
  32. regexpFilterExpression: 'refs/heads/' + env.BRANCH_NAME,
  33. regexpFilterText: '$ref'
  34. )
  35. }
  36. // 存放所有任务的合集
  37. stages {
  38. // 实现任务的具体流程
  39. stage('初始化构建环境') {
  40. steps {
  41. // echo "DOCKER_VERSION: ${env.DOCKER_VERSION}"
  42. echo "env.ref: ${env.ref}"
  43. script {
  44. if (env.ref) {
  45. echo "任务来源git Webhooks开启自动构建并发布docker"
  46. env.auto_run_docker_nginx_build_job = "true"
  47. env.auto_run_docker_nginx_pull_job = "true"
  48. }
  49. }
  50. echo "自动运行docker构建任务: ${env.auto_run_docker_nginx_build_job}"
  51. echo "自动运行docker发布任务: ${env.auto_run_docker_nginx_pull_job}"
  52. // XXX: 此处需注意类型
  53. // params.auto_run_docker_nginx_build_job === false
  54. // env.auto_run_docker_nginx_build_job === "false"
  55. // echo "params.auto_run_docker_nginx_pull_job: ${params.auto_run_docker_nginx_pull_job}"
  56. // echo 'env.BRANCH_NAME: ' + env.BRANCH_NAME
  57. // echo 'env.BUILD_NUMBER: ' + env.BUILD_NUMBER
  58. // echo 'env.BUILD_ID: ' + env.BUILD_ID
  59. // echo 'env.BUILD_DISPLAY_NAME: ' + env.BUILD_DISPLAY_NAME
  60. // echo 'env.JOB_NAME: ' + env.JOB_NAME
  61. // echo 'env.JOB_BASE_NAME: ' + env.JOB_BASE_NAME
  62. // echo 'env.BUILD_TAG: ' + env.BUILD_TAG
  63. nodejs('v16') {
  64. sh '''
  65. node -v
  66. npm -v
  67. npm install
  68. '''
  69. }
  70. }
  71. }
  72. stage('构建项目') {
  73. steps {
  74. script {
  75. // if (env.TAG_NAME) {
  76. // nodejs('v16') {
  77. // sh 'npm run build:prod'
  78. // }
  79. // } else
  80. if (env.BRANCH_NAME == 'master') {
  81. nodejs('v16') {
  82. sh 'npm run build:prod'
  83. }
  84. } else if (env.BRANCH_NAME ==~ /^(release\/.+)$/) {
  85. nodejs('v16') {
  86. sh 'npm run build:uat'
  87. }
  88. } else {
  89. nodejs('v16') {
  90. sh 'npm run build:test'
  91. }
  92. }
  93. }
  94. }
  95. }
  96. stage('构建docker镜像') {
  97. when {
  98. allOf {
  99. expression { env.auto_run_docker_nginx_build_job == "true" }
  100. anyOf {
  101. branch "develop"
  102. branch "release/*"
  103. branch "master"
  104. // branch 'uat'
  105. // expression { BRANCH_NAME ==~ /^(release\/.+)$/ }
  106. }
  107. }
  108. }
  109. environment {
  110. // 构建docker的任务名
  111. BUILD_DOCKER_JOB = """${sh(
  112. returnStdout: true,
  113. script: """
  114. if [[ "$BRANCH_NAME" == "master" ]];then
  115. echo "cloud_build_docker_nginx/prod"
  116. elif [[ "$BRANCH_NAME" =~ ^release\\/.* ]];then
  117. echo "cloud_build_docker_nginx/uat"
  118. else
  119. echo "cloud_build_docker_nginx/test"
  120. fi
  121. """
  122. ).trim()}"""
  123. }
  124. steps {
  125. echo '开始构建docker镜像'
  126. echo "DOCKER_VERSION: ${env.DOCKER_VERSION}"
  127. echo "build job: ${env.BUILD_DOCKER_JOB}"
  128. build job: env.BUILD_DOCKER_JOB, parameters: [string(name: 'version', value: env.DOCKER_VERSION), extendedChoice(name: 'service', value: 'manage_H5'), booleanParam(name: 'auto_run_docker_nginx_pull_job', value: env.auto_run_docker_nginx_pull_job == "true"), string(name: 'manage_H5_workspace', value: env.WORKSPACE)]
  129. }
  130. }
  131. // stage('发布docker镜像') {
  132. // when {
  133. // allOf {
  134. // expression { env.auto_run_docker_nginx_build_job == "true" }
  135. // expression { env.auto_run_docker_nginx_pull_job == "true" }
  136. // anyOf {
  137. // branch 'develop'
  138. // branch "release/*"
  139. // // branch 'master'
  140. // // branch 'uat'
  141. // // expression { BRANCH_NAME ==~ /^(release\/.+)$/ }
  142. // }
  143. // }
  144. // }
  145. // environment {
  146. // // 发布docker的任务名
  147. // PULL_DOCKER_JOB = """${sh(
  148. // returnStdout: true,
  149. // script: """
  150. // if [[ "$BRANCH_NAME" == "master" ]];then
  151. // echo ""
  152. // elif [[ "$BRANCH_NAME" =~ ^release\\/.* ]];then
  153. // echo "cloud_publish_docker_pre"
  154. // else
  155. // echo "cloud_publish_docker_powerful_test"
  156. // fi
  157. // """
  158. // ).trim()}"""
  159. // }
  160. // steps {
  161. // echo '开始发布docker镜像'
  162. // echo "build job: ${env.PULL_DOCKER_JOB}"
  163. // build job: env.PULL_DOCKER_JOB, parameters: [extendedChoice(name: 'service', value: 'cloud-nginx'), string(name: 'version', value: env.DOCKER_VERSION), string(name: 'replicas', value: '3'), string(name: 'memory', value: '2G'), string(name: 'cpu', value: '2')]
  164. // }
  165. // }
  166. }
  167. }