Jenkinsfile 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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. 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. steps {
  70. container('docker-client') {
  71. 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'"
  72. }
  73. }
  74. }
  75. stage('Get version from pom.xml') {
  76. steps {
  77. script {
  78. pom = readMavenPom file: 'pom.xml'
  79. VERSION = pom.version
  80. }
  81. }
  82. }
  83. stage('Build artifact') {
  84. steps {
  85. container('docker-client') {
  86. 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'"
  87. }
  88. }
  89. }
  90. stage('Build docker image') {
  91. steps {
  92. container('docker-client') {
  93. dir(path: './kafka-ui-api') {
  94. script {
  95. sh "ls -la"
  96. sh "ls -la target/"
  97. dockerImage = docker.build( registry + ":$VERSION", "--build-arg JAR_FILE=kafka-ui-api-0.0.4.jar -f Dockerfile ." )
  98. }
  99. }
  100. }
  101. }
  102. }
  103. stage('Publish docker image') {
  104. when {
  105. expression { return env.GIT_BRANCH == 'origin/master'; }
  106. }
  107. steps {
  108. container('docker-client') {
  109. script {
  110. docker.withRegistry( '', registryCredential ) {
  111. dockerImage.push()
  112. dockerImage.push('latest')
  113. }
  114. }
  115. }
  116. }
  117. }
  118. stage('Remove unused docker image') {
  119. steps{
  120. container('docker-client') {
  121. sh "docker rmi $registry:$VERSION"
  122. }
  123. }
  124. }
  125. stage('Create github release with text from commits') {
  126. when {
  127. expression { return env.GIT_BRANCH == 'origin/master'; }
  128. }
  129. steps {
  130. script {
  131. withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
  132. sh "bash -x release_json.sh v$VERSION"
  133. sh "git tag -f v$VERSION"
  134. sh "git push -f --tags https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git"
  135. sh "curl -XPOST -u $GIT_USER:$GIT_PASSWORD --data @/tmp/release.json https://api.github.com/repos/provectus/kafka-ui/releases"
  136. }
  137. }
  138. }
  139. }
  140. stage('Checkout master') {
  141. when {
  142. expression { return env.GIT_BRANCH == 'origin/master'; }
  143. }
  144. steps {
  145. sh 'git checkout origin/master'
  146. }
  147. }
  148. stage('Increase version in master') {
  149. when {
  150. expression { return env.GIT_BRANCH == 'origin/master'; }
  151. }
  152. steps {
  153. container('docker-client') {
  154. 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'"
  155. }
  156. }
  157. }
  158. stage('Push to master') {
  159. when {
  160. expression { return env.GIT_BRANCH == 'origin/master'; }
  161. }
  162. steps {
  163. script {
  164. withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
  165. sh "git add ."
  166. sh "git -c user.name=\"$GIT_USER\" -c user.email=\"\" commit -m \"Increased version in pom.xml\""
  167. sh "git push https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git HEAD:master"
  168. }
  169. }
  170. }
  171. }
  172. }
  173. post {
  174. always {
  175. cleanWs()
  176. }
  177. }
  178. }