Sunday, December 16, 2018

Simple Jenkins Pipeline

Pada kesempatan kali ini saya akan coba berbagi tentang jenkins pipeline.
Pipeline yang akan saya coba share adalah proses deploy sebuah aplikasi java ke server.
Sebenarnya pipeline tidak terlalu jauh berbeda dengan job yang ada di jenkins, hanya saja kalau model pipeline semua nya diubah menjadi satu script berbeda dengan job yang dibagi berdasarkan stepnya masing-masing.

Jenkins pipeline dapat ditulis dalam 2 tipe, yaitu Declarative dan Scripted. Yang akan saya share kali ini adalah Declarative.

Sebuah script jenkinsfile terdiri dari beberapa block:
Pertama adalah block pipeline, block pipeline adalah bagian penting ketika ingin membuat sebuah jenkinsfile dengan tipe declarative.
Selanjutnya adalah block stages, pada block ini kita define stage apa saja yang mau kita implemen pada pipeline kita, di dalam satu stages dapat memiliki 1 atau lebih stage,  lalu di dalam block stage terdapat block step, pada block inilah kita melakukan eksekusi untuk setiap stage yang terkait. Itu adalah beberapa block yang setidaknya ada pada sebuah jenkinsfile.

Nah disini saya akan coba share sebuah file jenkins pipeline:

pipeline {
    agent any
    tools {
        maven 'maven 3.5.4'
        jdk 'JDK-1.8'
    }
    stages {
        stage ('Pull source code') {
            steps {
                 git branch: 'development', credentialsId: '3965d3f2-9d56-40b5-b293-c9a10af6d0f6', poll: false, url: 'https://doandk@bitbucket.org/nostratech/nostra-food-backend.git'
            }
        }
     
        stage ('Build java') {
             steps {
                 sh "mvn clean package -DskipTests=true
            }
         }
       
        stage('Archive artifact') {
            steps {
                archiveArtifacts 'src/**, target/nostra-food-0.0.1-SNAPSHOT.jar, projectctl.sh, onlyIfSuccessful: true'
            }
        }
     
        stage('Publish artifact') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'nostra-food-be', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/nostra/nostra-food-dev;
                ./projectctl.sh stop development;
                sleep 3;
                DATE=`date \'+%Y-%m-%d %H:%M:%S\'`
                mv *.jar jar-archive/nostra-food-"$DATE".jar;
                cd /home/nostra;
                ls -ls;
                mv target/*.jar ~/nostra-food-dev;
                sleep 1;
                mv src ~/nostra-food-dev;
                sleep 1;
                mv projectctl.sh ~/nostra-food-dev;
                sleep 1;
                cd /home/nostra/nostra-food-dev;
                chmod +x projectctl.sh;
                ./projectctl.sh start development;
                sleep 30;
                ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/nostra-food-0.0.1-SNAPSHOT.jar, projectctl.sh, src/**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}

Demikian yang bisa saya share kali ini, semoga bermanfaat.

No comments:

Post a Comment