1. 程式人生 > >Jenkins+docker實現應用發布和更新

Jenkins+docker實現應用發布和更新

jenkins docker

Jenkins+docker實現應用發布

Jenkinscentos6.5 ip192.168.83.84

Dockercentos7.2 ip192.168.83.60

一、安裝Jenkins

最新版:

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

sudo yum install jenkins


穩定版

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo

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

二、安裝jenkins插件

成功啟動jenkins後,在瀏覽器中輸入192.168.83.84:8080訪問配置jenkins,根據提示找到密碼並輸入,選擇默認插件自動安裝。安裝好了以後會提示創建第一個admin 用戶,創建成功後進入

jenkins界面。

選擇系統管理—>插件管理—>可選插件

在右側filter框中輸入Docker plugin,找到Docker plugin後直接安裝

安裝完成後在系統管理à系統設置的最後可以找到新增一個雲的選項

三、docker服務器配置

安裝dockersudo yum install docker

參考文檔:https://docs.docker.com/engine/installation/linux/centos/

以前臺方式啟動dockerdocker -d -H unix:///var/run/docker.sock -H 0.0.0.0:4243

dockerhub下一個新的centos鏡像

docker pull centos:latest

構建基於dockertomcat鏡像

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

四、配置docker

登錄jenkinsweb管理端

點擊系統管理-->系統設置

技術分享

技術分享

Namedocker雲的名字,要唯一,等下有用

Docker URLDocker服務器的地址和端口

其他參數可如圖配置,連接測試成功後會顯示docker的版本號


技術分享

添加temple並配置

技術分享

技術分享

技術分享

需要配置的項:

Docker Image:當前docker雲裏存在的,需要用到的dockerimage的名字

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雲下要使用的鏡像名

點擊應用保存

五、相關腳本

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


Jenkins+docker實現應用發布和更新