spring-boot項目的docker集成化部署(一)

spring-boot項目的docker集成化部署

[toc]java

前言

聽說流行的微服務和docker一塊兒,更配哦!接下來,使用簡單spring-boot項目演示docker的集成化部署的案例,在看過微笑的博客以爲不過癮,本身動手,下面的方案與Devops的方式比較接近;但願搭建理解這種思路。linux

基本思路與方案

docker化的流程圖1

  1. 開發者pushgit服務器
  2. Jenkins經過觸發器收到通知
  3. Jenkins克隆工做區
  4. Jenkins建立一個Docker鏡像(注意:這是用maven的docker插件
  5. Jenkins將鏡像推到Docker Hub

借鑑圖片git

docker化的流程圖2

基本步驟

準備源碼

Github路徑:spring-boot_docker_demospring

說明:這裏使用com.spotify的docker-maven-plugin的插件;用法參閱代碼註釋。docker

服務器和基礎環境

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安裝有三種方式apache

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,你們確定十分熟悉的操做。tomcat

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
複製代碼

修改Jenkins的配置端口和登陸用戶

可避免避免和Tomcat端口重複的問題springboot

4. 啓動服務
service jenkins start
複製代碼
Jenkins的基本初始化
1. 登陸

登陸

2. 安裝Jenkins插件

安裝推薦插件

3.安裝成功

基本按照推薦來 bash

首頁

4. 配置jdk和maven配置

配置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」

查看docker的鏡像

5. 啓動docker容器
# 最好添加--name參數
docker run --name= springboot/spring-boot_docker_demo -p 8081:8080 -t srping-demo
複製代碼

啓動日誌
啓動docker

問題解決

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

服務器和Jenkins的對比

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的使用等。因爲篇幅的緣由可能放在了後面的文章。


參考資料

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

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

相關文章
相關標籤/搜索