jenkinsfile 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. node {
  2. service_name = "tzy"
  3. registry = "registry.azure.ipangyou.com/poyi/${service_name}"
  4. k3s_opts = "--kubeconfig ~/k3s-dev.yaml"
  5. cpu_limits = "800m"
  6. cpu_requests = "500m"
  7. stage('source code check out'){
  8. echo "1. Check out project source ..."
  9. dir("projdir"){
  10. //git branch: 'master', credentialsId: 'lingxz_git.ipangyou.com', url: 'https://git.ipangyou.com/poyi/tzy-admin.git'
  11. checkout([$class: 'GitSCM',
  12. branches: [[name: 'master']],
  13. doGenerateSubmoduleConfigurations: false,
  14. extensions: [[$class: 'CleanBeforeCheckout'], [$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true, timeout: 240]],
  15. submoduleCfg: [],
  16. userRemoteConfigs: [[credentialsId: 'lingxz_git.ipangyou.com', url: 'https://git.ipangyou.com/poyi/tzy-admin.git']]
  17. ])
  18. }
  19. dir("confdir") {
  20. git branch: 'master', credentialsId: 'lingxz_git.ipangyou.com', url: 'http://git.ipangyou.com/poyi/deployments.git'
  21. }
  22. }
  23. stage("maven build") {
  24. echo "2. Building java package ..."
  25. dir("projdir"){
  26. sh '$MAVEN_HOME/bin/mvn clean package'
  27. }
  28. }
  29. stage("docker image build") {
  30. echo "3. Building docker image: $registry:dev-$BUILD_NUMBER ..."
  31. dir("projdir"){
  32. sh '''cat > Dockerfile<<EOF
  33. FROM openjdk:8-alpine as final
  34. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
  35. apk add --update ttf-dejavu &&\
  36. rm -rf /var/cache/apk/*
  37. ADD tzy-admin/target/tzy-admin.jar /app/tzy-admin/target/tzy-admin.jar
  38. #Minimum heap size set to 128mb as Xms128m, and maximum is set to 512 as Xmx512m - to be configured depending on individual needs of the app
  39. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xmx4096m","-Dserver.port=80","-jar","/app/tzy-admin/target/tzy-admin.jar", "--spring.config.location=file:/app/configs/application.yml,file:/app/configs/application-druid.yml"]
  40. EOF
  41. '''
  42. def image = docker.build("$registry:dev-$BUILD_NUMBER")
  43. image.push()
  44. sh "docker rmi $registry:dev-$BUILD_NUMBER"
  45. }
  46. }
  47. stage("deploy") {
  48. dir("confdir/tyz-admin/dev") {
  49. configmap_file = 'configmap.yaml'
  50. configmap_env = 'configmap-env.yaml'
  51. sh "kubectl ${k3s_opts} create configmap tzy-config --dry-run=client --from-file=./configmap/ -o yaml > ${configmap_file}"
  52. sh "kubectl ${k3s_opts} apply -f ${configmap_file}"
  53. sh "kubectl ${k3s_opts} create configmap tzy-environment --dry-run=client --from-env-file=./configmap-env -o yaml > ${configmap_env}"
  54. sh "kubectl ${k3s_opts} apply -f ${configmap_env}"
  55. }
  56. sh """cat > deployment.yml<<EOF
  57. apiVersion: apps/v1
  58. kind: Deployment
  59. metadata:
  60. name: tzy-admin
  61. namespace: default
  62. spec:
  63. replicas: 2
  64. selector:
  65. matchLabels:
  66. app: tzy-admin
  67. release: dev
  68. template:
  69. metadata:
  70. labels:
  71. app: tzy-admin
  72. release: dev
  73. spec:
  74. imagePullSecrets:
  75. - name: regcredential
  76. containers:
  77. - name: tzy-admin
  78. image: ${registry}:dev-$BUILD_NUMBER
  79. command: ["java"]
  80. args: ["-Djava.security.egd=file:/dev/./urandom","-Xmx2048m","-Dserver.port=80","-jar","/app/tzy-admin/target/tzy-admin.jar", "--spring.config.location=file:/app/configs/application.yml,file:/app/configs/application-druid.yml"]
  81. ports:
  82. - name: http
  83. containerPort: 80
  84. envFrom:
  85. - configMapRef:
  86. name: tzy-environment
  87. volumeMounts:
  88. - name: config-volume
  89. mountPath: /app/configs
  90. volumes:
  91. - name: config-volume
  92. configMap:
  93. name: tzy-config
  94. EOF
  95. """
  96. sh "kubectl ${k3s_opts} apply -f deployment.yml"
  97. sh """cat > deployment-merchant.yml<<EOF
  98. apiVersion: apps/v1
  99. kind: Deployment
  100. metadata:
  101. name: tzy-merchant
  102. namespace: default
  103. spec:
  104. replicas: 2
  105. selector:
  106. matchLabels:
  107. app: tzy-merchant
  108. release: dev
  109. template:
  110. metadata:
  111. labels:
  112. app: tzy-merchant
  113. release: dev
  114. spec:
  115. imagePullSecrets:
  116. - name: regcredential
  117. containers:
  118. - name: tzy-merchant
  119. image: ${registry}:dev-$BUILD_NUMBER
  120. command: ["java"]
  121. args: ["-Djava.security.egd=file:/dev/./urandom","-Xmx2048m","-Dserver.port=80","-jar","/app/tzy-admin/target/tzy-admin.jar", "--spring.config.location=file:/app/configs/application.yml,file:/app/configs/application-druid.yml"]
  122. resources:
  123. limits:
  124. cpu: $cpu_limits
  125. requests:
  126. cpu: $cpu_requests
  127. readinessProbe:
  128. httpGet:
  129. path: /health
  130. port: 80
  131. initialDelaySeconds: 15
  132. periodSeconds: 30
  133. failureThreshold: 3
  134. ports:
  135. - name: http
  136. containerPort: 80
  137. envFrom:
  138. - configMapRef:
  139. name: tzy-environment
  140. volumeMounts:
  141. - name: config-volume
  142. mountPath: /app/configs
  143. volumes:
  144. - name: config-volume
  145. configMap:
  146. name: tzy-config
  147. EOF
  148. """
  149. sh "kubectl ${k3s_opts} apply -f deployment-merchant.yml"
  150. }
  151. }