spring-boot專案的docker整合化部署(一)

weixin_34208185發表於2018-10-05

spring-boot專案的docker整合化部署

[toc]

前言

據說流行的微服務和docker一起,更配哦!接下來,使用簡單spring-boot專案演示docker的整合化部署的案例,在看過微笑的部落格覺得不過癮,自己動手,下面的方案與Devops的方式比較接近;希望搭建理解這種思路。

基本思路與方案

  1. 開發者pushgit伺服器
  2. Jenkins通過觸發器收到通知
  3. Jenkins克隆工作區
  4. Jenkins建立一個Docker映象(注意:這是用maven的docker外掛
  5. Jenkins將映象推到Docker Hub

借鑑圖片

基本步驟

準備原始碼

Github路徑:spring-boot_docker_demo

說明:這裡使用com.spotify的docker-maven-plugin的外掛;用法參閱程式碼註釋。

伺服器和基礎環境

Linux下Java8安裝

1. 下載
wget --no-cookies \
--no-check-certificate \
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz \
-O jdk-8-linux-x64.tar.gz
複製程式碼
2. 解壓安裝
tar -zxvf jdk-8-linux-x64.tar.gz
mv jdk-8-linux-x64.tar.gz /usr/local
複製程式碼
3. 配置環境變數
export JAVA_HOME=/usr/local/jdk1.8.0_181/
export PATH=$PATH:$JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_181/
export JRE_HOME=$JAVA_HOME/jre                 #tomcat需要
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
複製程式碼
4. 重新整理環境變數
source  /etc/profile #重新整理環境變數
2.1.3.2.3	Linux下Manven安裝 
複製程式碼

maven的安裝

1. 下載maven
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
複製程式碼
2. 安裝
tar -zxvf apache-maven-3.5.0-bin.tar.gz
mv apache-maven-3.5.4 /usr/local/maven/apache-maven-3.5.4
複製程式碼
3. 配置環境變數
export MAVEN_HOME=/usr/local/maven/apache-maven-3.5.4
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH #注意這裡新增$MAVEN_HOME/bin
複製程式碼
4. 重新整理環境變數
source  /etc/profile #重新整理環境變數
複製程式碼

安裝Jenkins

Jenkins安裝有三種方式

1. 基於Docker的安裝
docker run \
  -u root \
  --rm \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean
複製程式碼
2. 基於war包方式

在官網下載,放入Tomcat的目錄中即可;打war,大家肯定十分熟悉的操作。

3. 使用yum方式直接安裝 (推薦)
1.下載
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key  
複製程式碼
2.安裝
yum install jenkins
複製程式碼
3. 配置
vi /etc/sysconfig/jenkins
複製程式碼

可避免避免和Tomcat埠重複的問題

4. 啟動服務
service jenkins start
複製程式碼
Jenkins的基本初始化
1. 登入

2. 安裝Jenkins外掛

3.安裝成功

基本按照推薦來

4. 配置jdk和maven配置

說明這裡其實git非必須,之前的外掛安裝中安裝了

Pipeline語法

語法請自行查閱資料,這裡使用groovy的語法

Jenkins的專案配置
1. 新建pipeline的專案
2. 新增如下jekins的指令碼內容:注意:使用pipeline的語言
#!groovy
pipeline{
	agent any

	environment {
		REPOSITORY="https://gitee.com/will-we/spring-boot_docker_demo.git"
	}
    tools {
        maven 'm3'
        jdk 'java8'
    }
	stages {
		stage('獲取程式碼'){
			steps {
				echo "start fetch code from git:${REPOSITORY}"
				//清空當前目錄
				deleteDir()
				//拉去程式碼	
				git "${REPOSITORY}"
			}
		}
		stage('程式碼靜態檢查'){
			steps {
				//虛擬碼檢查
				echo "start code check"
			}
		}		
		stage('編譯+單元測試'){
			steps {
				echo "start compile"
				//切換目錄
				sh 'mvn -Dmaven.test.skip=true -U clean install'
			}
		}
		stage('構建映象'){
			steps {
				echo "start build image"
				//build映象
				sh 'mvn clean package docker:build'
			}
		}
	}
}
複製程式碼
3. 立即構建”,檢視執行的日子如下:

4. 如果看上面的恭喜你,構建映象成功;參看docker的映象,對你“so easy”

5. 啟動docker容器
# 最好新增--name引數
docker run --name= springboot/spring-boot_docker_demo -p 8081:8080 -t srping-demo
複製程式碼

問題解決

1. Jenkins構建時出現:“mvn: command not found”

解決方案:

自己試著摸著石頭過河,只能藉助搜尋引擎了;如下是解決的流程:

1) 安裝Pipeline Maven Integration外掛

2) 檢查環境變數

上面安裝了外掛後依舊不好使,繼續找原因吧,Maven not found in Jenkins【StackOverflow】有著這個題問題:原因如下:
The reason is that Jenkins is installed and run as a ‚system user‘ service. This means the process can‘t see the ENV variables and PATH of your user (user level). Setting up maven in PATH and ENV variables on system level makes the trick.
大體意思是:jekins的無法讀取系統的環境變數;於是分別檢視了大致的伺服器和jekins的變數。 Jenkins 伺服器/bin/bash

3) Jenkins匯入java和maven的許可權

還記得之前配置Jdk和maven的“全域性工具設定”,注意:這裡設定也是依舊不能直接讀取,需要如下方式引入;“m3”是配置時名稱,“java8”也是配置名稱。

    tools {
        maven 'm3'
        jdk 'java8'
    }
複製程式碼

2. Linux中埠占用問題
#方式一:參看埠8080資訊
netstat -lnp | grep 8080
#方式二:參看埠8080資訊
lsof -i :808
#殺死程式
kill -9 pid號
複製程式碼

結語

1. 本文總結:

我們使用了一個簡單的spring-boot專案部署到遠端伺服器的操作流程,從而實現了推送程式碼到Git遠端倉庫,使用jekins的整合化構建docker實現,自動化部署方式。

2. 後期優化:

演示spring-boot的簡單部署方式,其實該專案的還有很多地方優化,例如:doker pushdocker的倉庫、使用Jenkins的觸發器git hook等;以及後期;spring-boot的多模組、以及docker compose的使用等。由於篇幅的原因可能放在了後面的文章。


參考資料

================================================================================

================================================================================

相關文章