使用Jenkins一鍵分佈式部署springboot項目(Docker版)

目錄

測試環境

測試效果

一、Ubuntu安裝Docker

1.1卸載舊版本

1.2設置 Docker 倉庫

1.3設置阿里雲鏡像加速器:

1.4安裝 Docker Engine-Community

1.5測試docker是否安裝成功

1.6使用 Shell 腳本進行安裝

二、Docker基本使用及常用命令

2.1 docker 基本命令

2.2 docker容器自動啓動設置

三、安裝啓動jenkers

3.1官網

3.2 docker安裝jenkins

3 訪問和解鎖Jenkins

四、準備一個springboot項目

五、搭建服務器環境

5.1安裝jdk

5.2安裝maven

修改maven鏡像地址方法

配置環境變量

5.3安裝git

5.4關閉防火牆

5.5克隆兩個副本服務器備用

六、使用jenkins發佈springboot項目

6.1安裝推薦的插件

Tips1:使用容器鏡像加速器

Tips2:插件安裝失敗解決方法

6.2安裝一個必備插件

6.3創建管理員

6.4全局工具配置

出現紅色錯誤提示處理方法:

6.5系統配置

6.6新建一個任務

6.7構建

七、問題與解決

參考文獻


測試環境

VMware® Workstation 12 Pro 12.1.1 build-3770994

Ubuntu16、docker 19.03.9

Jdk1.8 \Maven3.6.3\git2.17.1\OpenSSL 1.1.1\OpenSSH_7.6p1

Jenkins lts版 2.222.3.

工具putty、eclipse

github:https://github.com/leon2016/hello_word.git

 

測試效果

通過jenkins一鍵分佈式部署github上springboot項目到兩個服務器上,並支持定時構建。

 

 

 

一、Ubuntu安裝Docker

1.1卸載舊版本

我使用的是putty連接本地虛擬機。

# apt-get remove docker docker-engine docker.io containerd runc

 

1.2設置 Docker 倉庫

在新主機上首次安裝 Docker Engine-Community 之前,需要設置 Docker 倉庫。之後,您可以從倉庫安裝和更新 Docker 。

# apt-get update

 

#  apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

1添加 Docker 的官方 GPG 密鑰:

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

29DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通過搜索指紋的後8個字符,驗證您現在是否擁有帶有指紋的密鑰:

#apt-key fingerprint 0EBFCD88

3)使用以下指令設置穩定版倉庫

# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable"

1.3設置阿里雲鏡像加速器:

    設置後下載速度會大幅提升。

# mkdir -p /etc/docker

# tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://lcu2fcdl.mirror.aliyuncs.com"]

}

EOF

# systemctl daemon-reload

# systemctl restart docker

 

鏡像加速器獲取地址:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

 

1.4安裝 Docker Engine-Community

方式一:執行下面命令可安裝最新版本

# apt-get install docker-ce docker-ce-cli containerd.io (推薦)

 

方式二:執行下面命令安裝特定穩定版本

# apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

 

安裝下載需要一點時間,瞭解了一下Docker Engine :

  • 社區版 ( CE, Community Edition )社區版 ( Docker Engine CE ) 主要提供了 Docker 中的容器管理等基礎功能,主要針對開發者和小型團隊進行開發和試驗,社區版本是免費。
  • 企業版 ( EE, Enterprise Edition )則在社區版的基礎上增加了諸如容器管理、鏡像管理、插件、安全等額外服務與功能,爲容器的穩定運行提供了支持,適合於中大型項目的線上運行,企業版是收費的。

 

1.5測試docker是否安裝成功

# docker run hello-world

 

查看docker版本:

# docker --version

1.6使用 Shell 腳本進行安裝

Docker 在 get.docker.com和 test.docker.com 上提供了方便腳本,用於將快速安裝 Docker Engine-Community 的邊緣版本和測試版本。腳本的源代碼在 docker-install 倉庫中。 不建議在生產環境中使用這些腳本。

$ curl -fsSL https://get.docker.com -o get-docker.sh

$ sudo sh get-docker.sh

Tips:

如果要用 Docker 作爲非root用戶,則應考慮使用類似以下方式將用戶添加到 docker 組:

$ sudo usermod -aG docker your-user

 

二、Docker基本使用及常用命令

參考:https://www.runoob.com/docker/docker-hello-world.html

2.1 docker 基本命令

docker run -name 容器名  -v 掛載 鏡像 // 啓動容器

docker run --rm // 每次退出清理容器文件系統,適合調試

docker run --restart=always // 自動重啓容器,與上面互斥

docker ps -a // 查看運行的容器,-a表示查看所有容器

docker exec -it 容器id /bin/bash   // 進入容器,exit退出

docker kill/stop 容器id  // 強行停止/停止容器

docker run -d // 啓動容器,-d表示後臺啓動

docker start 容器id // 啓動一個已停止的容器

docker restart 容器id // 重啓容器

docker logs -f +容器名 // 打印日誌

docker start `docker ps -a -q` // 啓動所有運行過的容器

docker stop `docker ps -a -q` // 停止所有運行過的容器

docker rmi 鏡像id

docker rm 容器id

2.2 docker容器自動啓動設置

在運行docker容器時可以加如下參數來保證每次docker服務重啓後容器也自動重啓:

docker run --restart=always

如果已經啓動了則可以使用如下命令:

docker update --restart=always 容器id

 

三、安裝啓動jenkers

3.1官網

https://www.jenkins.io/

3.2 docker安裝jenkins

普通安裝

# apt-get update

# apt-get install jenkins

Docker安裝jenkers(推薦):

簡單安裝啓動命令如下,後面會講到更復雜的命令:

# docker run --name jenkins --user=root --restart=always -p 8080:8080 -p 50000:50000 -v /opt/data/jenkins_home:/var/jenkins_home -d jenkins/jenkins:lts
Docker run詳解參考:https://www.cnblogs.com/yfalcon/p/9044246.html

3 訪問和解鎖Jenkins

http://192.168.79.130:8080/

Docker的可以直接日誌查看密碼

# docker logs jenkins // jenkins是所創建的容器的名字

比如我的密碼:48d6ffe4f7354f85aef0c5135e40269b

正確輸入密碼後進入上面插件安裝頁面。現在,docker、jenkins都正常運行了,下面準備發佈一個springboot的helloworld項目。

 

四、準備一個springboot項目

 

可以直接用我github上的一個demo:

https://github.com/leon2016/hello_word.git

自己也可以快速生成springboot項目,地址:https://start.spring.io/

 

五、搭建服務器環境

5.1安裝jdk

# apt-get install openjdk-8-jdk

# java -version # 查看是否安裝成功

安裝目錄在 /usr/lib/jvm/java-8-openjdk-amd64

 

5.2安裝maven

官網下載最新安裝包:http://maven.apache.org/download.cgi

https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

 

# mkdir /opt/maven

# cd /opt/maven

# wget <官網maven安裝包下載地址>

# tar zvxf <安裝包.gz>

修改maven鏡像地址方法

在maven文件夾下的/conf/settings.xml的mirrors節點中添加(對所有的項目都有效)

 <mirror>
           <id>alimaven</id>
           <name>aliyun maven</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
           <mirrorOf>central</mirrorOf>
</mirror>

命令:vi  settings.xml-> 可輸入/mirrors快速定位mirrors節點位置->i插入->esc->:wd保存

配置環境變量

在/etc/profile 中最後面添加以下幾行

MAVEN_HOME=<maven安裝目錄>
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

執行source /etc/profile使環境變量生效

運行mvn -v驗證maven是否安裝成功

Tips:# whereis mvn也可查看安裝目錄

 

5.3安裝git

# apt-get install git

設置提交用戶名和郵箱

git config --global user.name "leon"

git config --global user.email "1754******[email protected]"

 

5.4關閉防火牆

爲了測試方便暫時關閉防火牆,暫時不討論防火牆安全設置問題,後續總結。

sudo ufw status # 查看防火牆狀態

sudo ufw disable  #關閉防火牆

5.5克隆兩個副本服務器備用

 

六、使用jenkins發佈springboot項目

前面都是鋪墊,現在纔是激動人心的時刻。。

現在將配置jenkins實現一鍵分佈式部署springboot項目,jenkins將幫我們:

  1. 從git倉庫中檢出代碼
  2. 執行maven的clean install編譯命令
  3. 將編譯後的jar包通過ssh分發到指定的服務器

剩下的需要應用服務器配置:

  1. 應用服務器環境搭建:應用服務器應安裝好java運行環境。
  2. 啓動腳本:jenkins只是將jar包分發到了服務器,需要編寫啓動腳本

6.1安裝推薦的插件

安裝推薦的插件,可能需要等很長一段時間,出現錯誤了也沒關係,後面可以再安裝。

Tips1:使用容器鏡像加速器

使用jenkins默認插件下載地址很慢,提速方法如下:

# docker ps // 找到jenkins容器的id ,我的是487a96db6adf

# docker exec -it 487a96db6adf /bin/bash   // 使用docker exec命令進入容器命令行

執行下列修改/var/jenkins_home/updates/default.json文件,文件位於jenkins工作目錄

# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

# exit退出容器

修改完成後,jenkins將使用百度和下面地址下載和更新插件:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

 

Tips2:插件安裝失敗解決方法

之前安裝失敗的插件可以在插件管理再次嘗試安裝:

 

6.2安裝一個必備插件

同理安裝Maven Release Plug-in、Publish Over SSH兩個必備插件。

6.3創建管理員

 

 

 

 

6.4全局工具配置

 

出現紅色錯誤提示處理方法:

方法一:通過-v參數掛載相應的目錄 (推薦)

docker run --name=jenkins --restart=always \
  -u root \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /root/.m2:/root/.m2 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/lib/jvm/java-8-openjdk-amd64/bin/java:/usr/lib/jvm/java-8-openjdk-amd64/bin/java \
  -v /usr/lib/jvm/java-8-openjdk-amd64:/usr/lib/jvm/java-8-openjdk-amd64 \
  -v /opt/maven/apache-maven-3.6.3:/opt/maven/apache-maven-3.6.3 \
  -v /opt/data/jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

 

方法二:docker exec命令進入docker安裝相應的環境

如圖,按照方法一掛載後,就沒有報錯了,可以正常設置jdk,git,maven,並保存成功了。

 

6.5系統配置

系統配置主要需要配置:git ,ssh應用服務器(後續springboot項目將部署到其上面)

最後點擊保存就ok了,接下來,新建一個一鍵分佈式部署springboot的任務。

6.6新建一個任務

(1)新建一個maven構建任務。

(2)配置git倉庫和構建觸發器

(3)配置構建命令及構建成功後分發SSH服務器

Tips:如果不知道Source files怎麼配,可以配置好git後,執行一下構建,然後查看工作空間。

繼續添加第2臺服務器,配置方式同服務器1一樣即可。

配置完後,保存就好了,下面我們開始構建。

Tips:Server.sh腳本代碼如下,需要提前放置到應用服務器上,並給予執行權限,命令:chmod +x sh文件名。

#!/bin/bash
function killproject()
{
  project_pid=$(netstat -lnp | grep 8090|awk '{print $7}'|cut -d/ -f1)
  if [  $project_pid > 0 ];then
        echo "項目已經啓動了,開始關閉項目,項目pid爲: $project_pid "
        kill -9 $(netstat -lnp | grep 8090|awk '{print $7}'|cut -d/ -f1)
        echo '項目關閉成功,開始重啓項目。。。'
  else
        echo "項目未啓動,直接啓動"
  fi
}
function start_project()
{
        source /etc/profile
        echo '正在啓動項目。。。'
        cd /usr/local/jenkins-target/
        nohup java -jar demo-0.0.1-SNAPSHOT.jar >publish.log &2>1 &

}
function check_project()
{
  check_pid=$(netstat -lnp | grep 8090|awk '{print $7}'|cut -d/ -f1)
  if [ $check_pid  > 0 ];then
        echo "project is start and  pid = : $check_pid  "
  else
        echo "project are not start"
  fi

}
killproject
start_project
sleep 15
check_project

 

6.7構建

(1)點擊立即構建,雙擊進度條,選擇控制檯輸出,可以查看日誌

(2)構建成功標識

(3)驗證

訪問服務器1,服務器2的springboot項目接口,接口正常訪問代表部署成功。

(4)版本回退(TODO)

上面構建成功了,只是一個比較好的開始。有時候,新發版本會出現問題,通過jenkins執行shell的能力,我們也可以構建一個任務專門用於版本回退,還有郵件通知,通過構建docker容器發佈應用等等。(未完待續)

 

七、問題與解決

     參考了許多資料,失敗了多次才最終構建成功,這只是第一步,jenkins的功能十分強大,後續還可以添加很多實用的定製功能,如郵件提醒等。最後再總結一下,實踐中遇到的一些問題和解決方法。

1.報錯:Could not transfer artifact ... sun.security.validator.ValidatorException: No trusted certificate found

解決方式:

maven命令加-X獲取更多保存日誌。

docker run 添加maven本地倉庫掛載,同時檢查一下jdk,maven配置或掛載。

  -v /root/.m2:/root/.m2 \

 

2.報錯:ERROR: Aborted Maven execution for InterruptedIOException

這個錯誤偶爾會出現,重新構建即可,更多參考:

https://issues.jenkins-ci.org/browse/JENKINS-3273

3.報錯:ssh分發jar包時出現No such file or dirctory

   在應用服務器上創建相應目錄,如果是在root用戶下創建的,需要chmod 777 目標文件夾。

4.報錯:permission denied

   (1)如下圖:這個是權限問題,是sh沒有執行權限,可以通過chmod +x server.sh賦予執行權限。

(2)如下圖:這個是推送jar到目標目錄jenkins-target時,ssh登錄用戶leon沒有jenkins-target目錄的操作權限導致的,可以通過chmod 777 jenkins-target賦權解決。

參考文獻

https://www.jenkins.io/doc/

https://www.runoob.com/docker/ubuntu-docker-install.html

https://www.runoob.com/docker/docker-hello-world.html

https://www.jianshu.com/p/41f2def6ec59

https://spring.io/quickstart

https://www.cnblogs.com/dengfaheng/p/10959120.html

https://blog.csdn.net/wwd0501/article/details/78470534

https://blog.csdn.net/niuzaiwenjie/article/details/80747709

https://blog.csdn.net/qq_38270106/article/details/97764483

https://www.cnblogs.com/jiefu/p/10968296.html

https://www.jianshu.com/p/72d05e43a8f3

https://github.com/jenkinsci/docker

https://www.cnblogs.com/sxdcgaq8080/p/10489326.html

https://www.cnblogs.com/zsh-blogs/p/10508656.html

https://www.cnblogs.com/yyxianren/p/10904518.html

https://blog.csdn.net/zjh_746140129/article/details/80904876

https://www.cnblogs.com/ztxd/p/12346806.html

https://blog.csdn.net/weixin_33743661/article/details/92550013

https://www.cnblogs.com/zsh-blogs/p/10508656.html

https://www.jianshu.com/p/8b47631ae374

 

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