1、前述
1、在平時開發過程中,我們經常需要部署測試環境、生産環境、開發環境等等各種環境,作者所知的部署方法是如下方法
1)本地打包 war/jar,将包上傳,放到 Tomcat 啟動,或者用原始指令啟動
2)本地打包,伺服器跑腳本來啟動項目
3)伺服器安裝 git,進行 git 認證,在通過腳本在伺服器 git 拉代碼打包部署
2、架構流程圖

3、環境搭建
相信看了上面的流程圖以後,大家心裡對本篇文章已經有一個基本的認識了,接下來就開始實際的環境搭建,将該呈現的每一步都呈現出來
3.1 Jenkins 必要插件:
git、github、publish over ssh
3.2 Jenkins 配置 Publish over ssh:
1)系統管理 -> 系統配置->Publish over ssh
2) 如下圖所示配置:
這裡主要是配置 Jenkins ssh key 來登入伺服器,然後通過 ssh 的方式發送的遠端主機,以達到遠端部署的目的,一般有密碼和密鑰兩種方式配置,本文使用密鑰的方式來配置
Passphrase
:私鑰 key 的密碼,如果密鑰使用了密碼加密,則在此處進行設定。
Path to key
:Jenkins master上要使用的私有 SSH密鑰 的位置,路徑可以是密鑰的絕對路徑,也可以是相對于JENKINS_HOME目錄的路徑。(可忽略)
Key
:将伺服器上的私鑰粘貼到這裡,密鑰應包括頁眉和頁腳(----)以及介于兩者之間的所有内容。
3)ssh server 配置
SSH Server Name
:表示這個 ssh 的名字,自定義
Hostname
:需要連接配接ssh的主機名或ip位址,此處填寫應用伺服器IP,本文中,Jenkins 伺服器跟應用伺服器一台機,是以是 127.0.0.1
Username
:伺服器 ssh 登入的使用者名
Remote Directory
:遠端部署目錄,Jenkins 會将包傳到這個目錄下
點選 Test Configuration,出現 success 就表示成功了,如果是 auth fail ,就要注意密鑰是否正确以及配對成功。
可以添加多個 ssh server,發送給多個應用伺服器進行部署,jenkins 配置 ssh 伺服器的時候,需要在伺服器生成密鑰對,私鑰複制到 key 值裡,然後将公鑰複制到 authorized_keys 檔案裡面去,才可以連接配接遠端主機成功
至此 Publish over ssh 插件的配置就配置完了
3.3 Jenkins 伺服器安裝配置 git
配置 git 并且測試
如果倉庫是私有的,則需要認證添加 git ssh key
參考:git 安裝配置
3.4 Jenkins 伺服器安裝 maven 或者在 Jenkins 管理頁面上安裝 maven 插件,用來打包代碼,将 maven 的setting.xml 裡的鏡像倉庫換成阿裡雲的,速度會快些
四、建立 Jenkins 任務并配置
4.1 建立一個自由風格的軟體項目
4.2
4.3
4.4
4.5
- 建構後操作這裡選擇
2)Send build artifacts over SSH
就是前面SSH Server
配置的Publish over ssh
,由于現在都是負載均衡或者叢集方式部署生産環境,是以在這裡可以配置多個遠端主機部署,SSH server
:Publish over ssh 自定義設定的 nameName
: jenkins 工作空間下目前任務檔案目錄的相對路徑源檔案,這裡為 var/lib/jenkins/workspace/faith-jenkins,那麼這裡的 Source files 就是填 target/faith-jenkins.jarSource files
Remove prefix
:需要移除的檔案字首,如果指定了此選項,則源檔案中所選的所有檔案都必須以該路徑字首開始,如果選擇要傳輸的檔案且該檔案不低于Remove字首,則釋出将失敗。其實也就是将工作任務目錄下的源檔案目錄移除掉,這樣傳輸的時候就不需要在遠端主機建立目錄,直接将 jar/war 傳輸到目錄下
Remote directory:如果指定,檔案将在此目錄下傳輸(相對于 Publish over ssh 配置中指定的遠端目錄)。如果目錄不存在,将建立它,本文為 /faith_jenkins/tmp
Exec command:
如果這個配置框中有任何内容,那麼它将在遠端伺服器上執行。如果配置了源檔案,那麼将在執行Exec指令之前傳輸這些檔案。如果指令的退出狀态不為零,則釋出将失敗。指令執行中的STDOUT和STDERR記錄在Jenkins控制台中。
例如下所示:這次釋出中,Exec command 的 exit status not zero,說明這次 Jenkins 建構失敗
Exec command:Jenkins+Docker+git+Springboot 持續內建自動化部署
參考:Publish over ssh plugincp /faith_jenkins/tmp/faith-jenkins.jar /data/workspace/faith-jenkins cd /data/workspace/faith-jenkins ./dockerBuild.sh ./dockerRun.sh
4.6 上述提供的一些檔案或者檔案夾是需要提前建立好的
1)
/data/workspace/faith-jenkins
2)
dockerBuild.sh
:遠端主機用來建構 docker 鏡像的腳本
3)
dockerRun.sh
:遠端主機用來啟動 docker 容器的腳本
其中 dockerBuild.sh 内容為:
docker build -t faith-jenkins .
docker image prune -f
dockerRun.sh 内容為:
docker rm -f faith-jenkins
docker run --name="faith-jenkins" -p 8010:8010 -d faith-jenkins
4)
docker build -t faith-jenkins .
的意思就是在遠端主機的目錄下建構一個 docker 鏡像,docker build 會加載目前目前上下文的 Dockerfile 檔案,根據這個 Dockerfile 來建立一個檔案,具體指令參考:docker 文檔
5)Dockerfile:
FROM java:8
ADD faith-jenkins.jar /usr/local/jar/
# 修正 docker 容器裡面的時間
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
#聲明暴漏端口,這裡一般不強制,因為我們通常用 docker -p port:port 來映射端口,以達到通路容器内部的目的
EXPOSE 8010
CMD ["java","-jar","/usr/local/jar/faith-jenkins.jar"]
這裡要注意的兩點是:
1)當我們的項目用到了資料庫(mysql、redis)的時候,我們要注意容器内部能否通路到 db,docker 與主控端有四種網絡模式,當網絡沒有共享的時候,docker 容器内部是無法用 localhost 這樣的方式來連接配接資料庫的,同時也要注意資料庫是否 public 以及 ip 、port 是否允許
2) 一般來說,如果我們的項目有産生檔案的時候,需要用 docker -v 來将内部的檔案資料卷挂載到我們的主控端目錄,docker 容器關閉以後,内部資料是無法持久化的
docker -v 主控端目錄:容器目錄
說明:本文示範一個大概的流程,是以這裡直接采用 java -jar 的方式來啟動 jar 包,一般來說,我們會将 jar 包放進 web 容器來啟動項目
至此我們 jenkins 的一個任務就是配置完了,接下來就是應用伺服器安裝 docker
五、安裝 docker
根據不通的 linux 核心版本安裝 docker,這裡就不多做闡述了
六、jenkins 建構項目
1)點選立即建構,本文采用的是手動建構,在任務配置裡,可以選擇定時建構等多種建構方式
2)建構成功
點選 build history 剛才的建構,點選控制台輸出,就可以看到如下成功的資訊
3)伺服器執行指令
docker logs -f -t 100 容器 id
就可以看到項目的實時日志
注意事項:
1)出現下圖所示的錯誤時,可能是由于容器已經在跑了,沒有被删除,是以導緻無法啟動新的容器,
2)當在執行 dockerRun.sh 腳本這一步的時候,如果報錯無法找到容器删除,可以去腳本裡把删除容器的這個操作先去掉,重新 jenkins 建構一次 ,等跑起來以後,再加進去删除容器的那條指令,之後再次啟動就不會報錯了,這裡有更好的解決辦法,本文不做闡述
3) 建構的時候,可能有時候網絡原因、遠端主機太多等等原因導緻 build 逾時,可以在任務配置裡,将 ssh server 的 exec timeout 設定稍微大點,如下所示,點選進階,進行設定
七、配置多台應用伺服器,滿足負載均衡
7.1 增加 ssh server
重複第三大點 3.2 的操作
7.2 填寫遠端主機 ip,并且将 Jenkins 伺服器的 公鑰複制妨到遠端主機 authorized_keys 檔案裡,然後再遠端主機建立 Remote Directory 目錄,Test 成功即可
7.3 将 dockerBuild.sh、dockerRun.sh、Dockerfile 三個檔案複制到,賦予腳本執行權限
7.4 遠端主機安裝 docker
7.5 在任務裡增加一個 ssh server,下圖的 faith_jenkins_ssh_02 就是 7.1 步驟中新增的遠端主機
7.5 儲存退出,重新建構就會發現在第二台遠端主機的目錄下有了一個 jar 包
在 data/workspace/faith-jenkins 目錄下也會有這個 jar 包
7.6 docker 指令檢視啟動日志,可以看到啟動成功
7.7 頁面通路效果
當兩台伺服器的項目都起來以後,可以通過設定 nginx 轉發請求,分流、減少單機壓力等等
八、總結
通過本文,大概了解了Jenkins+docker+git 持續釋出以及自動化部署的大概流程,當然還有其他很多更加優秀的方法和技術,值得作者去學習,文中若有不了解或者錯誤的地方,還望不吝賜教。