Jenkins+docker實現應用發佈java
Jenkins:centos6.5 ip:192.168.83.84linux
Docker:centos7.2 ip:192.168.83.60git
1、安裝Jenkinsweb
最新版:docker
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repoapache
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.keyvim
sudo yum install jenkinscentos
穩定版瀏覽器
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repotomcat
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
根據需求在jenkins的服務器上(centos)執行其中一種命令,安裝jenkins。
另:jenkins依賴java環境,需先安裝好java
啓動jenkins:
Service Jenkins start
2、安裝jenkins插件
成功啓動jenkins後,在瀏覽器中輸入192.168.83.84:8080訪問配置jenkins,根據提示找到密碼並輸入,選擇默認插件自動安裝。安裝好了之後會提示建立第一個admin 用戶,建立成功後進入jenkins界面。
選擇系統管理—>插件管理—>可選插件
在右側filter框中輸入Docker plugin,找到Docker plugin後直接安裝
安裝完成後在系統管理à系統設置的最後能夠找到新增一個雲的選項
3、docker服務器配置
安裝docker:sudo yum install docker
參考文檔:https://docs.docker.com/engine/installation/linux/centos/
之前臺方式啓動docker:docker -d -H unix:///var/run/docker.sock -H 0.0.0.0:4243
從dockerhub下一個新的centos鏡像
docker pull centos:latest
構建基於docker的tomcat鏡像
cd
mkdir docker
cd docker
傳輸
到該目錄並解壓
vim build.df
FROM centos:latest
MAINTAINER akjfit
#install jdk
ADD jdk1.8.0_91/opt/jdk1.8.0_91
ENV JAVA_HOME/opt/jdk1.8.0_91
ENV PATH$PATH:$JAVA_HOME/bin
RUN mkdir -p"$JAVA_HOME"
#install tomcat
ADDapache-tomcat-9.0.0.M4 /opt/apache-tomcat-9.0.0.M4
ENV CATALINA_HOME/opt/apache-tomcat-9.0.0.M4
ENV PATH$CATALINA_HOME/bin:$PATH
ENV JAVA_OPTS -Xmx512m-Duser.timezone=GMT+08
RUN mkdir -p"$CATALINA_HOME"
WORKDIR $CATALINA_HOME
ENV LANG en_US.UTF-8
RUN cp/usr/share/zoneinfo/Asia/Shanghai /etc/localtime
EXPOSE 8080
docker build -t centos:tomcat -f build.df/root/docker
4、配置docker雲
登陸jenkins的web管理端
點擊系統管理-->系統設置
Name:docker雲的名字,要惟一,等下有用
Docker URL:Docker服務器的地址和端口
其餘參數可如圖配置,鏈接測試成功後會顯示docker的版本號
添加temple並配置
須要配置的項:
Docker Image:當前docker雲裏存在的,須要用到的dockerp_w_picpath的名字
Docker Command:啓動該docker時執行的命令
Volumes:將docker container內部的目錄掛載至宿主機的目錄
Port bindings:將docker container內部的端口映射至宿主機
Memory Limit in MB:限制dockercontainer的內存大小
Credentials:配置管理認證
點擊新建(maven項目)
選中docker container
在Label Expression中填寫master(即由master來執行該job)
在源碼管理中選中git
Repository URL:須要打成war包的代碼的位置
Credentials:輸入能夠登陸git服務器的用戶密碼
勾選Build whenever a SNAPSHOT dependency is built(若是項目有依賴關係)
按照上圖填寫相關信息
在docker宿主機上部署2個腳本,stop.sh爲判斷當前項目的docker容器是否在運行,在運行就stop掉並刪除該容器
deploy.sh爲刪除以前發佈的包,併發布新生成的包
在jenkins主機上部署1個腳本,scp.sh爲將在jenkins 主機上生成的war包傳遞到docker宿主機上
Action to choose:選擇Provsion&StartContainer
Docker Cloud name:在系統設置中配置的惟一的docker雲名
Template ID:該docker雲下要使用的鏡像名
點擊應用保存
5、相關腳本
scp腳本:
#/bin/bash
if [ -e /opt/.jenkins/workspace/$1-master/$1-core/pom.xml];then
scp/opt/.jenkins/workspace/$1-master/$1-core/target/*.war 192.168.83.60:/tmp/$1
else
scp/opt/.jenkins/workspace/$1-master/target/*.war 192.168.83.60:/tmp/$1
#sleep 20
fi
stop腳本
#/bin/bash
id=`dockerps -a |grep 0:$1 |awk '{print $1}'`
if [ -n"$id" ];
then
dockerstop $id
docker rm$id
else
echo"no running docker container"
fi
deploy腳本:
#!/bin/bash
cd/workspace/$1-master
rm -rfROOT
cp/tmp/$1/$2.war /workspace/$1-master
unzip$2.war -d ROOT >/dev/null
rm -f$2.war
rm -rf/workspace/$1-master/ROOT/profiles