jenkins+ansible+supervisor打造一個web構建釋出系統
一步一步用jenkins,ansible,supervisor打造一個web構建釋出系統。
本來應該還有gitlab這一環節的,但是感覺加上,內容會增加很多。所以直接用github上的spring-mvc-showcase專案來做演示。
https://github.com/spring-projects/spring-mvc-showcase
本文的環境用docker來構建。當然也可以任意linux環境下搭建。
如果沒有安裝docker,可以參考官方的文件:
https://docs.docker.com/installation/ubuntulinux/#ubuntu-trusty-1404-lts-64-bit
下面將要介紹的完整流程是:
- github作為原始碼倉庫
- jenkins做為打包伺服器,Web控制伺服器
- ansible把war包,釋出到遠端機器
- 安裝python-pip
- 用pip安裝supervisor
- 安裝jdk
- 下載,部署tomcat
- 把tomcat交由supervisor託管
- 把jenkins生成的war包釋出到遠端伺服器上
- supervisor啟動tomcat
- 在http埠等待tomcat啟動成功
- supervisor託管app程式,提供一個web介面可以檢視程式狀態,日誌,控制重啟等。
在文章的最後,會給出一個完整的docker映象,大家可以自己執行檢視實際效果。
安裝jenkins
- 先用docker來啟動一個名為“jenkins”的容器:
sudo docker run -i -t -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' ubuntu /bin/bash
8080是jenkins的埠,8101是spring-mvc-showcase的埠,9001是supervisor的web介面埠
執行完之後,會得到一個container的shell。接著在這個shell裡安裝其它元件。
- 安裝open jdk 和 git:
sudo apt-get update
sudo apt-get install openjdk-7-jdk git
- 下載配置tomcat:
apt-get install wget
mkdir /opt/jenkins
cd /opt/jenkins
wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.18/bin/apache-tomcat-8.0.18.tar.gz
tar xzf apache-tomcat-8.0.18.tar.gz
- 安裝jenkins:
cd /opt/jenkins/apache-tomcat-8.0.18/webapps
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
rm -rf ROOT*
mv jenkins.war ROOT.war
- 啟動jenkins:
/opt/jenkins/apache-tomcat-8.0.18/bin/startup.sh
然後在本機用瀏覽器訪問:http://localhost:8080/ ,可以看到jenkins的介面了。
配置jenkins
安裝git外掛
安裝git外掛:
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
在“系統管理”,“外掛管理”,“可選外掛”列表裡,搜尋“Git Plugin”,這樣比較快可以找到。
因為jenkins用google來檢查網路的連通性,所以可能在開始安裝外掛時會卡住一段時間。
配置maven, java
開啟 http://localhost:8080/configure,
在jenkins的系統配置裡,可以找到maven,git,java相關的配置,只要勾選了,在開時執行job時,會自動下載。
JDK可以選擇剛才安裝好的openjdk,也可以選擇自動安裝oracle jdk。
Git會自動配置好。
配置ssh服務
安裝sshd服務:
sudo apt-get install openssh-server sshpass
編輯
vi /etc/ssh/sshd_config
把
PermitRootLogin without-password
改為:
PermitRootLogin yes
重啟ssh服務:
sudo /etc/init.d/ssh restart
為root使用者配置密碼,設定為12345:
passwd
最後嘗試登陸下:
ssh root@127.0.0.1
安裝ansible
在jenkins這個container裡,繼續安裝ansible,用來做遠端釋出用。
先安裝pip,再用pip安裝ansible:
sudo apt-get install python-pip python-dev build-essential git
sudo pip install ansible
配置ansible playbook
把自動釋出的ansible playbook clone到本地:
https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy
mkdir -p /opt/ansible
cd /opt/ansible
git clone https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy
在jenkins上建立deploy job
-
新建一個maven的專案/job,名為spring-mvc-showcase
-
在配置頁面裡,勾選“引數化構建過程”,再依次增加“String”型別的引數
共有這些引數:
app 要釋出的app的名字
http_port tomcat的http埠
https_port tomcat的https埠
server_port tomcat的server port
JAVA_OPTS tomcat啟動的Java引數
deploy_path tomcat的目錄
target_host 要釋出到哪臺機器
war_path jenkins生成的war包的目錄
- “原始碼管理”,選擇Git,再填入程式碼地址
https://github.com/spring-projects/spring-mvc-showcase.git
- 在“Post Steps”裡,增加呼叫ansible playbook的shell命令
cd /opt/ansible/jenkins-ansible-supervisor-deploy
ansible-playbook -i hosts site.yml --verbose --extra-vars "target_host=$target_host app=$app http_port=$http_port https_port=$https_port server_port=$server_port deploy_path=$deploy_path JAVA_HOME=/usr JAVA_OPTS=$JAVA_OPTS deploy_war_path=$WORKSPACE/$war_path"
最後,儲存。
測試構建
一切都配置好之後,可以在jenkins介面上,在左邊,選擇“Build with Parameters”,“開始”來構建專案了。
如果構建成功的話,就可以開啟 http://localhost:8101 ,就可以看到spring-mvc-showcase的介面了。
開啟 http://localhost:9001 可以看到superviosr的控制網頁,可以檢視tomcat程式的狀態,重啟,檢視日誌等。
如果想要釋出到其它機器上的話,只要在/opt/ansible/jenkins-ansible-supervisor-deploy/hosts
檔案裡增加相應的host配置就可以了。
其它的一些東東
如果提示
to use the 'ssh' connection type with passwords, you must install the sshpass program
則安裝:
sudo apt-get install sshpass
演示的docker image
如果只是想檢視實際執行效果,可以直接把 hengyunabc/jenkins-ansible-supervisor 這個image拉下來,執行即可。
docker run -it -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' hengyunabc/jenkins-ansible-supervisor
總結
- jenkins提供了豐富的外掛,可以定製自己的打包這過程,並可以提供完善的許可權控制
- ansible可以輕鬆實現遠端部署,配置環境等工作,輕量簡潔,功能強大
- supervisor託管了tomcat程式,提供了web控制介面,所有執行的程式一目瞭然,很好用
相關文章
- 如何構建一個WEB同構應用Web
- 用 GIN 構建一個 WEB 服務Web
- 華為雲釋出分散式編譯構建系統CodeArts Build分散式編譯UI
- 電子商城後臺系統(一):使用eclipse構建web專案EclipseWeb
- 前端自動化:Node 命令列前端自動構建釋出系統前端命令列
- 深入淺出Spring Web MVC:從零開始構建你的第一個Web應用SpringWebMVC
- 短影片一鍵釋出系統,一鍵釋出多個平臺,管理多賬號
- 使用飛冰+dva快速構建一個後臺系統
- JavaWeb——從零開始構建一個客戶管理系統(一)JavaWeb
- Vue.js - 構建你的第一個包並在NPM上釋出Vue.jsNPM
- 構建計費系統14個痛點
- 系統架構設計:平滑釋出和ABTesting架構
- 唯快不破!華為雲釋出分散式編譯構建系統CodeArts Build分散式編譯UI
- 從原始碼構建一個極簡的Linux作業系統原始碼Linux作業系統
- 全棧工程師如何快速構建一個Web應用全棧工程師Web
- 如何構建一個多人(.io) Web 遊戲,第 1 部分Web遊戲
- 如何構建一個多人(.io) Web 遊戲,第 2 部分Web遊戲
- PHPRAP 1.0.1版本釋出,打造 PHP 版 API 介面管理系統PHPAPI
- Flutter 2.0 釋出 | 針對 Web,移動端和桌面端構建的下一代 FlutterFlutterWeb
- 構建一個 @synchronizedsynchronized
- 為媒體資產構建一個雲原生的檔案系統
- 管理系統的登入控制?手寫一個釋出訂閱模型!模型
- 來來,一起設計一個簡單的活動釋出系統
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (一)GoReactJS
- iOS自動構建打包釋出指令碼iOS指令碼
- C++構建工具-構建系統C++
- 智慧金融系統的構建
- 根檔案系統構建
- 如何構建推薦系統
- 實踐:GNU構建系統
- 免費,一鍵釋出web頁面Web
- 跨界 - Omi 釋出多端統一框架 Omip 打通小程式與 Web框架Web
- Jenkins 構建自動化 .NET Core 釋出映象Jenkins
- 良好交易策略構建的思路與一個有效的量化交易系統開發
- 從零到一:用Go語言構建你的第一個Web服務GoWeb
- Azure Web App (一)釋出你的Net Core Web 專案WebAPP
- 從零開始學typescript構建一個rest風格web服務TypeScriptRESTWeb
- 使用LangGraph構建多Agent系統架構!架構