def VERSION pipeline { options { disableConcurrentBuilds() } tools { maven 'mvn_3.6.3' } environment { registry = "provectuslabs/kafka-ui" registryCredential = 'docker-hub-credentials' } agent { kubernetes { label 'kafka-ui' yaml ''' apiVersion: v1 kind: Pod spec: containers: - name: docker-client image: docker:19.03.1 command: - sleep args: - 99d env: - name: DOCKER_HOST value: tcp://localhost:2375 volumeMounts: - name: cache mountPath: /tmp/repository - name: docker-daemon resources: limits: memory: 512Mi cpu: "500m" image: docker:19.03.1-dind securityContext: privileged: true env: - name: DOCKER_TLS_CERTDIR value: "" volumeMounts: - name: cache mountPath: /var/lib/docker volumes: - name: cache hostPath: path: /tmp type: Directory ''' } } stages { stage('Checkout release branch') { when { expression { return env.GIT_BRANCH == 'master'; } } steps { sh 'git checkout -b release' } } stage('Merge to release branch') { when { expression { return env.GIT_BRANCH == 'master'; } } steps { sh 'git merge origin/master' } } stage('Remove SNAPSHOT from version') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps { container('docker-client') { 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'" } } } stage('Get version from pom.xml') { when { expression { return env.GIT_BRANCH == 'master'; } } steps { script { pom = readMavenPom file: 'pom.xml' VERSION = pom.version } } } stage('Build artifact') { when { anyOf { changeRequest () expression { return env.GIT_BRANCH ==~ /.*master$/; } } } steps { container('docker-client') { 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'" } } } stage('Build docker image') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps { container('docker-client') { dir(path: './kafka-ui-api') { script { dockerImage = docker.build( registry + ":$VERSION", "--build-arg JAR_FILE=kafka-ui-api-\'$VERSION\'.jar -f Dockerfile ." ) } } } } } stage('Publish docker image') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps { container('docker-client') { script { docker.withRegistry( '', registryCredential ) { dockerImage.push() dockerImage.push('latest') } } } } } stage('Remove unused docker image') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps{ container('docker-client') { sh "docker rmi $registry:$VERSION" } } } stage('Create github release with text from commits') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps { script { withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) { sh "bash -x release_json.sh v$VERSION" sh "git tag -f v$VERSION" sh "git push -f --tags https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git" sh "curl -XPOST -u $GIT_USER:$GIT_PASSWORD --data @/tmp/release.json https://api.github.com/repos/provectus/kafka-ui/releases" } } } } stage('Checkout master') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps { sh 'git checkout master' } } stage('Increase version in master') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps { container('docker-client') { 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'" } } } stage('Push to master') { when { expression { return env.GIT_BRANCH ==~ /.*master$/; } } steps { script { withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) { sh "git add ." sh "git -c user.name=\"$GIT_USER\" -c user.email=\"\" commit -m \"Increased version in pom.xml\"" sh "git push https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git HEAD:master" } } } } } post { always { cleanWs() } } }