1. 程式人生 > >jenkins+docker+git+springboot實現可持續自動化部署

jenkins+docker+git+springboot實現可持續自動化部署

本篇文章引導你使用Jenkins部署SpringBoot專案,同時使用DockerGit實現簡單的持續整合和持續部署。(專案地址:first-app-demo)

流程圖如下:

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker02.png

  1. push程式碼到Github觸發WebHook。(因網路原因,本篇使用gitee
  2. Jenkins從倉庫拉去程式碼
  3. maven構建專案
  4. 程式碼靜態分析
  5. 單元測試
  6. build映象
  7. push映象到映象倉庫(本篇使用的映象倉庫為網易映象倉庫)
  8. 更新服務

Jenkins安裝

下載jenkins

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker07.png

初始化密碼

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker04.png

選擇外掛

進入使用者自定義外掛介面,選擇第二個(因為我們本次構建使用的為Pipelines

勾選與Pipelines相關的外掛

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker05.png

等待外掛安裝完成

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker06.png

配置使用者名稱和密碼

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker08.png

全域性配置

系統管理-》全域性工具配置 配置Git,JDK和Maven

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker09.png

安全配置

系統管理-》全域性安全配置

  • 勾選Allow anonymous read access
  • 取消防止跨站點請求偽造

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker10.png

新建任務

新建任務-》流水線

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker11.png

構建指令碼

勾選觸發遠端構建 (WebHooks觸發地址),填寫簡單的Pipeline script

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker12.png

#!groovy
pipeline{
	agent any

	stages {

		stage('test'){
			steps {
				echo "hello world"
			
			}
		}			
	}
}

測試指令碼

立即構建

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker13.png

控制檯輸出

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker14.png

配置WebHooks



修改指令碼

修改Pipeline script

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/docker/docker18.png

pipeline
{
    agent any
    
//定義倉庫地址
    environment {
        REPOSITORY="https://github.com/wangwencheng/first-app-demo.git"
}
    stages {
        stage('獲取程式碼'){
            steps {
                echo "start fetch code from git:${REPOSITORY}"
//清空當前目錄
                deleteDir()
//拉去程式碼    
                git "${REPOSITORY}"
}
}
        stage('程式碼靜態檢查'){
            steps {
//虛擬碼檢查
                echo "start code check"
}
}
        stage('編譯+單元測試'){
            steps {
                echo "start compile"
//重新打包
                    bat 'mvn -Dmaven.test.skip=true -U clean install'
}
}
        stage('構建映象'){
            steps {
                echo "start build image"
//build映象
                    bat 'docker build -t first-app-demo:1.0 .'
//登入dockerhub雲倉庫
                    bat 'docker login -u wangwch -p 273273wang...'
//推送映象到dockerhub倉庫
                    bat 'docker tag first-app-demo:1.0 wangwch/first-app-demo:1.0'
}
}
        stage('啟動服務'){
            steps {
                echo "start first-app-demo"
//重啟服務
                bat 'docker run first-app-demo:1.0'
            
}
}
}
}

Pipeline的幾個基本概念:

  • Stage: 階段,一個Pipeline可以劃分為若干個Stage,每個Stage代表一組操作。注意,Stage是一個邏輯分組的概念,可以跨多個Node。
  • Node: 節點,一個Node就是一個Jenkins節點,或者是Master,或者是Agent,是執行Step的具體執行期環境。
  • Step: 步驟,Step是最基本的操作單元,小到建立一個目錄,大到構建一個Docker映象,由各類Jenkins Plugin提供。