Jenkinsfile 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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-api"
  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. image: docker:19.03.1-dind
  35. securityContext:
  36. privileged: true
  37. env:
  38. - name: DOCKER_TLS_CERTDIR
  39. value: ""
  40. volumeMounts:
  41. - name: cache
  42. mountPath: /var/lib/docker
  43. volumes:
  44. - name: cache
  45. hostPath:
  46. path: /tmp
  47. type: Directory
  48. '''
  49. }
  50. }
  51. stages {
  52. stage('Checkout release branch') {
  53. when {
  54. expression { return env.GIT_BRANCH == 'origin/master'; }
  55. }
  56. steps {
  57. sh 'git checkout -b release'
  58. }
  59. }
  60. stage('Merge to release branch') {
  61. when {
  62. expression { return env.GIT_BRANCH == 'origin/master'; }
  63. }
  64. steps {
  65. sh 'git merge origin/master'
  66. }
  67. }
  68. stage('Remove SNAPSHOT from version') {
  69. when {
  70. expression { return env.GIT_BRANCH == 'origin/master'; }
  71. }
  72. steps {
  73. container('docker-client') {
  74. 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'"
  75. }
  76. }
  77. }
  78. stage('Tag release branch') {
  79. when {
  80. expression { return env.GIT_BRANCH == 'origin/master'; }
  81. }
  82. steps {
  83. script {
  84. pom = readMavenPom file: 'pom.xml'
  85. VERSION = pom.version
  86. sh "git tag -f v$VERSION"
  87. }
  88. }
  89. }
  90. stage('Build artifact') {
  91. steps {
  92. container('docker-client') {
  93. 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 clean install'"
  94. }
  95. }
  96. }
  97. stage('Build docker image') {
  98. steps {
  99. container('docker-client') {
  100. dir(path: './kafka-ui-api') {
  101. script {
  102. dockerImage = docker.build( registry + ":$VERSION", "--build-arg JAR_FILE=*.jar -f Dockerfile ." )
  103. }
  104. }
  105. }
  106. }
  107. }
  108. stage('Publish docker image') {
  109. when {
  110. expression { return env.GIT_BRANCH == 'origin/master'; }
  111. }
  112. steps {
  113. container('docker-client') {
  114. script {
  115. docker.withRegistry( '', registryCredential ) {
  116. dockerImage.push()
  117. dockerImage.push('latest')
  118. }
  119. }
  120. }
  121. }
  122. }
  123. stage('Remove unused docker image') {
  124. steps{
  125. container('docker-client') {
  126. sh "docker rmi $registry:$VERSION"
  127. }
  128. }
  129. }
  130. stage('Create github release with text from commits') {
  131. when {
  132. expression { return env.GIT_BRANCH == 'origin/master'; }
  133. }
  134. steps {
  135. script {
  136. withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
  137. sh "git push -f --tags https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git"
  138. sh "bash release_json.sh v$VERSION"
  139. sh "curl -XPOST -u $GIT_USER:$GIT_PASSWORD --data @/tmp/release.json https://api.github.com/repos/provectus/kafka-ui/releases"
  140. }
  141. }
  142. }
  143. }
  144. stage('Checkout master') {
  145. when {
  146. expression { return env.GIT_BRANCH == 'origin/master'; }
  147. }
  148. steps {
  149. sh 'git checkout origin/master'
  150. }
  151. }
  152. stage('Increase version in master') {
  153. when {
  154. expression { return env.GIT_BRANCH == 'origin/master'; }
  155. }
  156. steps {
  157. container('docker-client') {
  158. 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'"
  159. }
  160. }
  161. }
  162. stage('Push to master') {
  163. when {
  164. expression { return env.GIT_BRANCH == 'origin/master'; }
  165. }
  166. steps {
  167. script {
  168. withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
  169. sh "git add ."
  170. sh "git -c user.name=\"$GIT_USER\" -c user.email=\"\" commit -m \"Increased version in pom.xml\""
  171. sh "git push https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git HEAD:master"
  172. }
  173. }
  174. }
  175. }
  176. }
  177. post {
  178. always {
  179. cleanWs()
  180. }
  181. }
  182. }