jenkinsfile_prod 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. node {
  2. service_name = "tzy"
  3. registry = "registry.azure.ipangyou.com/poyi/${service_name}"
  4. k3s_opts = "--kubeconfig ~/k3s-prod.yaml"
  5. cpu_limits = "850m"
  6. cpu_requests = "500m"
  7. try{
  8. stage('source code check out'){
  9. echo "1. Check out project source ..."
  10. dir("projdir"){
  11. // git branch: 'master', credentialsId: 'lingxz_git.ipangyou.com', url: 'https://git.ipangyou.com/poyi/tzy-admin.git'
  12. checkout([$class: 'GitSCM',
  13. branches: [[name: 'master']],
  14. doGenerateSubmoduleConfigurations: false,
  15. extensions: [[$class: 'CleanBeforeCheckout'], [$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true, timeout: 240]],
  16. submoduleCfg: [],
  17. userRemoteConfigs: [[credentialsId: 'lingxz_git.ipangyou.com', url: 'https://git.ipangyou.com/poyi/tzy-admin.git']]
  18. ])
  19. }
  20. dir("confdir") {
  21. git branch: 'master', credentialsId: 'lingxz_git.ipangyou.com', url: 'http://git.ipangyou.com/poyi/deployments.git'
  22. }
  23. }
  24. stage("maven build") {
  25. echo "2. Building java package ..."
  26. dir("projdir"){
  27. sh '$MAVEN_HOME/bin/mvn clean package'
  28. }
  29. }
  30. stage("docker image build") {
  31. echo "3. Building docker image: $registry:$BUILD_NUMBER ..."
  32. dir("projdir"){
  33. sh '''cat > Dockerfile<<EOF
  34. FROM openjdk:8-alpine as final
  35. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
  36. apk add --update ttf-dejavu &&\
  37. rm -rf /var/cache/apk/*
  38. ADD tzy-admin/target/tzy-admin.jar /app/tzy-admin/target/tzy-admin.jar
  39. #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
  40. 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"]
  41. EOF
  42. '''
  43. def image = docker.build("$registry:$BUILD_NUMBER")
  44. image.push()
  45. sh "docker rmi $registry:$BUILD_NUMBER"
  46. }
  47. }
  48. stage("deploy") {
  49. dir("confdir/tyz-admin/prod") {
  50. configmap_file = 'configmap.yaml'
  51. configmap_env = 'configmap-env.yaml'
  52. sh "kubectl ${k3s_opts} create configmap tzy-config --dry-run=client --from-file=./configmap/ -o yaml > ${configmap_file}"
  53. sh "kubectl ${k3s_opts} apply -f ${configmap_file}"
  54. sh "kubectl ${k3s_opts} create configmap tzy-environment --dry-run=client --from-env-file=./configmap-env -o yaml > ${configmap_env}"
  55. sh "kubectl ${k3s_opts} apply -f ${configmap_env}"
  56. }
  57. sh """cat > deployment.yml<<EOF
  58. apiVersion: apps/v1
  59. kind: Deployment
  60. metadata:
  61. name: tzy-admin
  62. namespace: default
  63. spec:
  64. replicas: 2
  65. selector:
  66. matchLabels:
  67. app: tzy-admin
  68. release: prod
  69. template:
  70. metadata:
  71. labels:
  72. app: tzy-admin
  73. release: prod
  74. spec:
  75. affinity:
  76. podAntiAffinity:
  77. preferredDuringSchedulingIgnoredDuringExecution:
  78. - podAffinityTerm:
  79. labelSelector:
  80. matchExpressions:
  81. - key: app
  82. operator: In
  83. values:
  84. - tzy-admin
  85. topologyKey: kubernetes.io/hostname
  86. weight: 100
  87. imagePullSecrets:
  88. - name: regcredential
  89. containers:
  90. - name: tzy-admin
  91. image: ${registry}:$BUILD_NUMBER
  92. command: ["java"]
  93. args: ["-Djava.security.egd=file:/dev/./urandom","-Xmx1536m","-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"]
  94. resources:
  95. limits:
  96. cpu: $cpu_limits
  97. requests:
  98. cpu: $cpu_requests
  99. readinessProbe:
  100. httpGet:
  101. path: /health
  102. port: 80
  103. initialDelaySeconds: 15
  104. periodSeconds: 30
  105. failureThreshold: 5
  106. timeoutSeconds: 10
  107. ports:
  108. - name: http
  109. containerPort: 80
  110. envFrom:
  111. - configMapRef:
  112. name: tzy-environment
  113. volumeMounts:
  114. - name: config-volume
  115. mountPath: /app/configs
  116. volumes:
  117. - name: config-volume
  118. configMap:
  119. name: tzy-config
  120. EOF
  121. """
  122. sh "kubectl ${k3s_opts} apply -f deployment.yml"
  123. }
  124. } catch (e) {
  125. mail to: 'xiaozhou.ling@hobbystocks.cn,1169705999@qq.com', body: "${e}", subject: "[PROD]error occurs in building tzy-admin:$BUILD_NUMBER"
  126. throw e
  127. } finally {
  128. }
  129. mail to: 'xiaozhou.ling@hobbystocks.cn,1169705999@qq.com', body: "Building success", subject: "[PROD]succeed building tzy-admin:$BUILD_NUMBER"
  130. }