Jenkinsfile 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. def VERSION
  2. pipeline {
  3. options {
  4. disableConcurrentBuilds()
  5. }
  6. tools {
  7. maven 'mvn_3.6.3'
  8. }
  9. environment {
  10. registry = "provectuslabs/kafka-ui"
  11. registryCredential = 'docker-hub-credentials'
  12. }
  13. agent {
  14. kubernetes {
  15. label 'kafka-ui'
  16. yaml '''
  17. apiVersion: v1
  18. kind: Pod
  19. spec:
  20. containers:
  21. - name: docker-client
  22. image: docker:19.03.1
  23. command:
  24. - sleep
  25. args:
  26. - 99d
  27. env:
  28. - name: DOCKER_HOST
  29. value: tcp://localhost:2375
  30. volumeMounts:
  31. - name: cache
  32. mountPath: /tmp/repository
  33. - name: docker-daemon
  34. resources:
  35. limits:
  36. memory: 512Mi
  37. cpu: "500m"
  38. image: docker:19.03.1-dind
  39. securityContext:
  40. privileged: true
  41. env:
  42. - name: DOCKER_TLS_CERTDIR
  43. value: ""
  44. volumeMounts:
  45. - name: cache
  46. mountPath: /var/lib/docker
  47. volumes:
  48. - name: cache
  49. hostPath:
  50. path: /tmp
  51. type: Directory
  52. '''
  53. }
  54. }
  55. stages {
  56. stage('Checkout release branch') {
  57. when {
  58. expression { return env.GIT_BRANCH == 'master'; }
  59. }
  60. steps {
  61. sh 'git checkout -b release'
  62. }
  63. }
  64. stage('Merge to release branch') {
  65. when {
  66. expression { return env.GIT_BRANCH == 'master'; }
  67. }
  68. steps {
  69. sh 'git merge origin/master'
  70. }
  71. }
  72. stage('Remove SNAPSHOT from version') {
  73. when {
  74. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  75. }
  76. steps {
  77. container('docker-client') {
  78. sh "docker run -v $WORKSPACE:/usr/src/mymaven -v /tmp/repository:/root/.m2/repository -w /usr/src/mymaven maven:3.6.3-jdk-13 bash -c 'mvn versions:set -DremoveSnapshot'"
  79. }
  80. }
  81. }
  82. stage('Get version from pom.xml') {
  83. when {
  84. expression { return env.GIT_BRANCH == 'master'; }
  85. }
  86. steps {
  87. script {
  88. pom = readMavenPom file: 'pom.xml'
  89. VERSION = pom.version
  90. }
  91. }
  92. }
  93. stage('Build artifact') {
  94. when {
  95. anyOf {
  96. changeRequest ()
  97. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  98. }
  99. }
  100. steps {
  101. container('docker-client') {
  102. sh "docker run -v /var/run/docker.sock:/var/run/docker.sock -v $WORKSPACE:/usr/src/mymaven -v /tmp/repository:/root/.m2/repository -w /usr/src/mymaven provectuslabs/openjdk:13 bash -c 'chown -R \$(whoami):\$(whoami) kafka-ui-react-app && ./mvnw clean package -Pprod'"
  103. }
  104. }
  105. }
  106. stage('Build docker image') {
  107. when {
  108. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  109. }
  110. steps {
  111. container('docker-client') {
  112. dir(path: './kafka-ui-api') {
  113. script {
  114. dockerImage = docker.build( registry + ":$VERSION", "--build-arg JAR_FILE=kafka-ui-api-\'$VERSION\'.jar -f Dockerfile ." )
  115. }
  116. }
  117. }
  118. }
  119. }
  120. stage('Publish docker image') {
  121. when {
  122. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  123. }
  124. steps {
  125. container('docker-client') {
  126. script {
  127. docker.withRegistry( '', registryCredential ) {
  128. dockerImage.push()
  129. dockerImage.push('latest')
  130. }
  131. }
  132. }
  133. }
  134. }
  135. stage('Remove unused docker image') {
  136. when {
  137. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  138. }
  139. steps{
  140. container('docker-client') {
  141. sh "docker rmi $registry:$VERSION"
  142. }
  143. }
  144. }
  145. stage('Create github release with text from commits') {
  146. when {
  147. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  148. }
  149. steps {
  150. script {
  151. withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
  152. sh "bash -x release_json.sh v$VERSION"
  153. sh "git tag -f v$VERSION"
  154. sh "git push -f --tags https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git"
  155. sh "curl -XPOST -u $GIT_USER:$GIT_PASSWORD --data @/tmp/release.json https://api.github.com/repos/provectus/kafka-ui/releases"
  156. }
  157. }
  158. }
  159. }
  160. stage('Checkout master') {
  161. when {
  162. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  163. }
  164. steps {
  165. sh 'git checkout master'
  166. }
  167. }
  168. stage('Increase version in master') {
  169. when {
  170. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  171. }
  172. steps {
  173. container('docker-client') {
  174. sh "docker run -v $WORKSPACE:/usr/src/mymaven -v /tmp/repository:/root/.m2/repository -w /usr/src/mymaven maven:3.6.3-jdk-13 bash -c 'mvn build-helper:parse-version versions:set -DnewVersion=\\\${parsedVersion.majorVersion}.\\\${parsedVersion.minorVersion}.\\\${parsedVersion.nextIncrementalVersion}-SNAPSHOT versions:commit'"
  175. }
  176. }
  177. }
  178. stage('Push to master') {
  179. when {
  180. expression { return env.GIT_BRANCH ==~ /.*master$/; }
  181. }
  182. steps {
  183. script {
  184. withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
  185. sh "git add ."
  186. sh "git -c user.name=\"$GIT_USER\" -c user.email=\"\" commit -m \"Increased version in pom.xml\""
  187. sh "git push https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git HEAD:master"
  188. }
  189. }
  190. }
  191. }
  192. }
  193. post {
  194. always {
  195. cleanWs()
  196. }
  197. }
  198. }