Docker安裝Jenkins實現自動化部署Maven項目

Jenkins version 2.277.4
Docker version 20.10.5

Jenkins中文官網->https://www.jenkins.io/zh/java

安裝Jenkins

docker 安裝一切都是那麼簡單,注意檢查8080是否已經佔用!git

docker run --name jenkins -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

若是沒改端口號的話
安裝完成後訪問地址-> http://{部署jenkins所在服務IP}:8080docker

初始化Jenkins

詳情見官網教程->https://www.jenkins.io/zh/doc...shell

第一個簡單的任務

小試牛刀,先建立簡單的任務,任務內容:執行服務器的shell腳本或Linux命令。
因爲jenkins 部署在docker容器內,沒辦法直接執行宿主機上的shell腳本,須要ssh登陸到宿主機上執行。這就須要Publish Over SSH插件。(若是Jenkins不是用docker部署的就不會有這個煩惱)一樣的道理,若是jenkins和項目不在一臺服務器也能夠使用這個插件,遠程拷貝打包的文件或者執行腳本等。segmentfault

安裝插件

首頁->系統管理->插件管理->搜索Publish Over SSH並安裝.
image.png服務器

配置 Publish Over SSH

首頁->系統管理->系統配置->
image.pngssh

建立任務

首頁->新建任務->填寫任務名稱->選擇:構建一個自由風格的軟件項目
直接在切到【構建】選項卡,點擊【添加構建步驟】選擇Send files or execute commands over SSH
在SSH service下面選擇剛剛在【系統配置】配置的服務器。
Exec command一欄直接輸入命令便可,不妨能夠試試echo $(pwd)命令。
image.pngmaven

保存,第一個任務建成功了,回到任務詳情頁,點擊當即構建,找到【控制檯輸出】能夠看到執行詳情。工具


建立一個自動化部署maven項目的任務

原理:jenkins用git插件將項目拉下來,用Maven Integration插件打包,用Publish Over SSH插件將打包的jar或者文件夾發送到部署項目的服務器,並執行shell腳本啓動~spa

先決條件:

  1. git插件:在初始化的時候就默認安裝的;
  2. Maven Integration插件:安裝方法同上;
  3. Maven配置:首頁->系統管理->全局工具配置,勾選自動安裝,選擇maven版本便可;
  4. Publish Over SSH: 建立上一個任務的安裝/配置過了;

git拉取代碼

一樣建立任務,來到配置頁面,切到【源碼管理】選項卡配置倉庫地址和密鑰:

image.png

這個時候能夠保存並點擊當即構建看看代碼可否拉下來。

Maven 打包

切到【構建】選項卡,點擊【添加構建步驟】選擇「調用頂層 Maven 目標

maven版本選擇在【全局工具配置】裏面配置的maven,若是沒有就是你不配,不,是你沒配!
目標一欄填寫打包命令:clean install -Dmaven.test.skip=true,或者根據狀況填寫。
image.png

這個時候能夠保存並點擊當即構建看看代碼可否正常打包。

運行啓動腳本

代碼拉下來了,jar也打包好了,可是jar包在容器裏面,能夠在【構建】模塊添加個Send files or execute commands over SSH,使用Source filesRemote directory傳輸jar文件,可是我部署jenkins的docker和部署項目的服務器是同一臺,使用命令docker cp 命令就能夠將docker容器裏面的jar文件拷貝出來,並和啓動項目的腳本寫在一塊兒。就省去了文件傳輸,直接執行腳本便可。
docker cp詳見《蠻吉學 Docker》

image.png

一個自動化部署maven項目的任務就建立完了


Send files or execute commands over SSH的文件傳輸功能

Source files(任務的工做空間目錄):就是代碼拉下來的根目錄,若是要傳輸文件夾用**表示
Remote directory(登陸項目服務器的家目錄):ssh登陸的家目錄,好比root登陸這個目錄就是/root,且文件只能傳輸到這個目錄下或這個目錄的下級目錄!
Exclude files:不傳輸的文件。能夠過濾不須要的文件好比README.md.gitignore
多個用逗號隔開,保證Pattern separator配置的是[, ]+

image.png

注意事項

  1. 【系統配置】裏配置Publish Over SSH,SSH服務器的登陸用戶最好用root,不然執行腳本可能會權限不足!
  2. Send files or execute commands over SSH 的文件傳輸功能配置的Remote directory只能是用戶的家目錄!
  3. docker部署的Jenkins不能直接運行宿主機上的shell腳本,且拉取的代碼,打包的文件都在docker容器內!要藉助Publish Over SSH插件。
  4. 宿主機不須要安裝git、maven!
  5. 若是直接執行啓動jar的腳本正常,Jenkins執行腳本報錯nohup: failed to run command java: No such file or directory,前面加一行source /etc/profile能夠解決。
  6. image.png
相關文章
相關標籤/搜索