Explorar o código

Ci cd (#84)

* initial commit

* added timestamps and email recipient

* Revert "added timestamps and email recipient"

This reverts commit 41085705

* added steps to Jenkins pipeline

* added steps to Jenkins pipeline

* added script for creating release notes

* fixed script for creating release notes

* fixed script for creating release notes

* Increased version

* Revert "Increased version"

This reverts commit 86949059

* added steps to Jenkins pipeline

* Increased version

* moved ci-cd from ci-cd branch to master

* Revert "Increased version"

This reverts commit 666ee948

* fixes in pipeline

* fixed version for docker

* fixed version for docker

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* added conditions to jenkinsfile

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* testing PR build

* fixed release_json.sh script

* fixed release_json.sh script

* fixed release_json.sh script

* testing PR build

* testing PR build

Co-authored-by: Bulat Yusupov <byusupov@provectus.com>
Co-authored-by: 66632 <>
Bulat Yusupov %!s(int64=4) %!d(string=hai) anos
pai
achega
e0290fc245
Modificáronse 2 ficheiros con 196 adicións e 0 borrados
  1. 183 0
      Jenkinsfile
  2. 13 0
      release_json.sh

+ 183 - 0
Jenkinsfile

@@ -0,0 +1,183 @@
+def VERSION
+
+pipeline {
+    options {
+        disableConcurrentBuilds()
+    }
+
+    tools {
+        maven 'mvn_3.6.3'
+    }
+
+    environment {
+        registry = "provectuslabs/kafka-ui-api"
+        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
+    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 == 'origin/master'; }
+            }
+            steps {
+                sh 'git checkout -b release'
+            }
+        }
+        stage('Merge to release branch') {
+            when {
+                expression { return env.GIT_BRANCH == 'origin/master'; }
+            }
+            steps {
+                sh 'git merge origin/master'
+            }
+        }
+        stage('Remove SNAPSHOT from version') {
+            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('Tag release branch') {
+            when {
+                expression { return env.GIT_BRANCH == 'origin/master'; }
+            }
+            steps {
+                script {
+                    pom = readMavenPom file: 'pom.xml'
+                    VERSION = pom.version
+                    sh "git tag -f v$VERSION"
+                }
+            }
+        }
+        stage('Build artifact') {
+            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 clean install'"
+                }
+            }
+        }
+        stage('Build docker image') {
+            steps {
+                container('docker-client') {
+                    dir(path: './kafka-ui-api') {
+                        script {
+                            dockerImage = docker.build( registry + ":$VERSION", "--build-arg JAR_FILE=*.jar -f Dockerfile ." )
+                        }
+                    }
+                }
+            }
+        }
+        stage('Publish docker image') {
+            when {
+                expression { return env.GIT_BRANCH == 'origin/master'; }
+            }
+            steps {
+                container('docker-client') {
+                    script {
+                        docker.withRegistry( '', registryCredential ) {
+                            dockerImage.push()
+                            dockerImage.push('latest')
+                        }
+                    }
+                }
+            }
+        }
+        stage('Remove unused docker image') {
+            steps{
+                container('docker-client') {
+                    sh "docker rmi $registry:$VERSION"
+                }
+            }
+        }
+        stage('Create github release with text from commits') {
+            when {
+                expression { return env.GIT_BRANCH == 'origin/master'; }
+            }
+            steps {
+                script {
+                    withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
+                        sh "git push -f --tags https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git"
+                        sh "bash release_json.sh v$VERSION"
+                        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 == 'origin/master'; }
+            }
+            steps {
+                sh 'git checkout origin/master'
+            }
+        }
+        stage('Increase version in master') {
+            when {
+                expression { return env.GIT_BRANCH == 'origin/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 == 'origin/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()
+        }
+    }
+}

+ 13 - 0
release_json.sh

@@ -0,0 +1,13 @@
+#!/bin/bash
+
+last_tag=$(git describe --tags --abbrev=0)
+
+if [ -z "$last_tag" ]; then
+    last_tag="HEAD"
+else
+    last_tag="$last_tag..HEAD"
+fi
+
+commits_list=$(git --no-pager log $last_tag --oneline --pretty=format:"- %s\\n" | uniq | tr -d '\n' | sed 's/\"/\\"/g')
+
+echo '{"tag_name":"'$1'","name":"'$1'","body":"'$commits_list'"}' > /tmp/release.json