docker搭建jenkins+maven代碼構建部署平臺
由於項目開發,經常需要在本地搭一些環境進行開發或測試,大傢知道搭環境、裝軟件、裝中間件是件非常麻煩的事情,有些軟件的安裝可能需要依賴其它環境的安裝,如安裝rabbitmq首先需要Erlang語言環境,一整套安裝下來不僅浪費時間而且還各種問題出現,嚴重影響開發進度。對於開發者來講,life is short, 盡一切可能提高開發效率。
Docker的出現對於技術界無疑是一件劃時代的事件,Docker由於具體豐富的應用鏡像倉庫、使用方便及可移植性而深受廣大IT從業人員喜愛。用Docker部署或安裝相應的應用不用花太多時間在安裝過程及細節、依賴上,真正做到開箱即用。本文以jenkins的搭建為例,說明Docker的基本操作過程:拉取鏡像、運行容器、文件掛載、跟蹤運行、關閉容器等,希望對剛入門Docker的技術愛好者能有所幫助。
Docker基本概念
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上。其實Docker最經典的是那張“背有集裝箱的海豚”圖,這張圖充分說明瞭docker引擎與容器之間的關系。
掌握鏡像、容器、倉庫基本就對Docker瞭解得差不多瞭,就能正確的使用Docker.
- 鏡像:可以理解為應用的“源碼”或
.exe
安裝文件; - 容器:就是鏡像運行後的實例,與鏡像的關系其實就如“對象”與“類”的關系;
- 倉庫:發佈鏡像的倉庫,在倉庫中可以下載或拉取各種鏡像(應用)而Docker則是一個容器運行所需要的引擎,所有的容器均運行在引擎之中。
Docker安裝過程(Centos6.9)
升級內核
Centos6.9需要升級內核版本才可以安裝Docker,升級過程如下
1.引入key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
2.yum安裝
yum --enablerepo=elrepo-kernel -y install kernel-lt
3.引導文件修改(grub.conf
)
vim /etc/grub.conf
將 default 設置為 0 ,default=0
4.重啟
安裝docker-io
1.安裝EPEL源
yum install http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm
2.安裝docker-io
yum -y install docker-io
3.啟動docker服務
service docker start
基於Docker的jenkins安裝
拉取應用
運行容器/實例之前,需要從docker hub倉庫中拉取相應的鏡像,可查看官網關於jenkins鏡像上的一些介紹,其中對於安裝命令、配置信息及文件目錄都有於詳細的說明。
從倉庫中拉取最新的jenkins,docker pull jenkins
,拉取其它版本的可通過命令docker pull jenkins:<version>
運行容器
運行容器/實例,需要考慮到本地端口與docker容器的映射,以便通過本地主機可以訪問。由於容器本身並不會持久化文件,其實docker不建議在容器中進行任何文件有關的寫入操作,僅僅當作一個“容器”使用。如果容器應用運行過程中會產生許多重要的數據需要保存或配置,如mysql的db文件,jenkins的插件、配置文件等,則建議將容器的文件掛載到本地,也即volume映射。
docker run -p 8080:8080 -p 50000:50000 -v /usr/local/docker_volume/jenkins:/var/jenkins_home -v /usr/local/apps/maven-3.3.9:/var/maven_home -v /usr/local/apps/maven-3.3.9/repo:/usr/local/apps/maven-3.3.9/repo --name my_jenkins -d jenkins
其中-p表示端口映射,即將本機上的端口映射到容器上的端口;
-v表示文件映射,即本機與容器共享映射,掛載文件
註意:由於jenkins構建maven項目需要依賴maven項目,因此在運行容器的時候將本機的maven_home共享給容器。由於容器運行時需要在本機共享文件中寫入,需要寫權限,sudo chown -R 1000:1000 /usr/local/docker_volume/jenkins
sudo chown -R 1000:1000 sudo chown -R 1000:1000
運行以上命令,窗口會打印容器id,通過docker ps
可查看運行的容器狀態及相關信息。
跟蹤應用log
輸入docker logs <CONTAINER ID>
即可跟蹤容器打印日志,初次啟動jenkins會在日志中打印密碼,復制後用於登陸jenkins.
關閉打開容器
關閉:docker stop <CONTAINER ID>
打開:docker start <CONTAINER ID>
tomcat賬戶配置
本例將maven編譯後的war部署到遠程tomcat,因此需要在tomcat中設置部署權限,編輯/con/tomcat-users.xml
配置文件,加入賬戶
<role rolename="tomcat"/> <role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="admin" password="admin" roles="admin,manager,tomcat,manager-gui,manager-script,manager-jmx,manager-status"/> <user username="root" password="admin" roles="admin,manager,tomcat,manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/>
配置jenkins,構建部署war應用
至此,通過訪問http://本機ip:8080
即可訪問到jenkins平臺,選擇默認安裝插件,安裝成功後選擇設置賬號等.
配置JDK、Maven等參數
在 “系統設置—> Global Tool Configuration”中添加JDK安裝如下圖所示
安裝“Deploy to container Plugin”插件用於部署war程序
在”系統設置—> 管理插件—>可選插件”中安裝
新建任務構建部署
添加svn源碼地址、tomcat部署地址
tomcat 部署配置,配置登錄tomcat的賬號
通過ssh腳本部署maven項目到指定Tomcat中
用以上方法在tomcat自帶的deployment實現部署對於服務器性能消耗較大,經常會出現如內存溢出等問題,導致部署失敗。采用ssh腳本部署的方式則方便快捷很多,對於內存消耗也沒有那麼多。
配置Publish Over SSH插件
在”系統設置—> 管理插件—>可選插件”中安裝(Publish Over SSH)插件,然後在“系統管理—>系統設置—>Publish over SSH”設置要發佈的linux服務器的登錄信息,各項配置與具體含義如下圖所示。配置完成後,點擊【Test Configuration】按鈕可測試是否連接上,如顯示“Success”則表示配置成功。
編寫部署ssh腳本
將以下shell腳本deploy.sh
存放在服務器的/home/admin/data
目錄下並給予執行權限chomd +x deploy.sh
,即上圖ssh登錄配置圖中的Remote Directory
目錄下。這樣配置表示jenkins登錄到tomcat所在的linux服務器後可用./deploy.sh
執行部署操作。如果demploy.sh
放在其它目錄,則用絕對路徑/..dir../..dir../deploy.sh
來執行即可。
#!/bin/bash # 文件:set ff=unix #defined export JAVA_HOME=/usr/local/java # tomcat部署位置 TOMCAT_HOME="/home/admin/data/tomcat-jenkins" # 登錄後的服務器用戶目錄,與上圖配置的Remote Directory設置相同 LOGIN_HOME="/home/admin/data" TOMCAT_PORT=10092 PROJECT="$1" #param validate if [ $# -lt 1 ]; then echo "you must use like this : ./deploy.sh <projectname> [tomcat port] [tomcat home dir]" exit fi if [ "$2" != "" ]; then TOMCAT_PORT=$2 fi if [ "$3" != "" ]; then TOMCAT_HOME="$3" fi #shutdown tomcat #"$TOMCAT_HOME"/bin/shutdown.sh #echo "tomcat shutdown" #check tomcat process #tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT` tomcat_pid=`ps -ef | grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'` echo "current :" $tomcat_pid while [ -n "$tomcat_pid" ] do sleep 5 tomcat_pid=`ps -ef | grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'` echo "scan tomcat pid :" $tomcat_pid if [ -n "$tomcat_pid" ]; then echo "kill tomcat :" $tomcat_pid kill -9 $tomcat_pid fi done #publish project echo "scan no tomcat pid,$PROJECT publishing" rm -rf "$TOMCAT_HOME"/webapps/$PROJECT cp "$LOGIN_HOME"/war/$PROJECT.war "$TOMCAT_HOME"/webapps/$PROJECT.war #bak project #BAK_DIR=/home/web_as/war/bak/$PROJECT/`date +%Y%m%d` #mkdir -p "$BAK_DIR" #cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war #remove tmp rm -rf "$LOGIN_HOME"/war/$PROJECT.war #start tomcat "$TOMCAT_HOME"/bin/startup.sh echo "tomcat is starting,please try to access $PROJECT conslone url"
項目構建配置
參照下圖保存配置後,即可構建maven項目,jenkins會復制編譯後的war項目到192.168.1.12
服務器對應的tomcat路徑下,然後啟動Tomcat部署項目。
到此這篇關於docker搭建jenkins+maven代碼構建部署平臺的文章就介紹到這瞭,更多相關docker搭建jenkins+maven內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- docker+gitlab+jenkins從零搭建自動化部署
- docker部署安裝jenkins的實現步驟
- Jenkins一鍵打包部署SpringBoot應用的方法步驟
- 使用jekins自動構建部署java maven項目的方法步驟
- 基於Docker、Nginx和Jenkins實現前端自動化部署