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

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

前言

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

基本思路與方案

docker化的流程圖1

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

    借鑑圖片

docker化的流程圖2

基本步驟

準備源碼

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

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

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

4. 啓動服務
service jenkins start
Jenkins的基本初始化
1. 登錄

登錄

2. 安裝Jenkins插件

安裝推薦插件

3.安裝成功

基本按照推薦來
首頁

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


參考資料

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章