Jenkinsfile 5.5 KB

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