首页 > 代码库 > jenkins+git实现docker持续部署

jenkins+git实现docker持续部署

jenkins所做的事情很简单,就拿我现在的情况来说吧,
(1)、每次开发完成,我都会push到我的远程仓库;
(2)、我再将我push到远程仓库的代码pull到我的测试服务器上;
(3)、在测试服务器上,我要重启下我的项目;
(4)、我再执行我的shell的测试脚本将代码打包放到tomcat/webapps下面;
(5)、最后去看我的脚本执行情况,得到结果
每次都是这样的一个重复步骤,这还是自己开发,自己测试的情况,如果是别人开发,那别人push后还得发邮件告诉我,我这边可以测试了。耽误的时间现在jenkins使用,我只需要将上面的配置好了,等开发那边开发完成,直接push就去做这些事
情。我这边什么都不用更管。我需要做的事情就只是针对他这次的更新,添加测试用例即可。

举个例子:

本地写了一个简单的web项目,我选择使用ant进行项目的打包,将项目传到github上面,然后在jenkins里新建了一个Job,然后配置这个Job,之后在源码管理部分选择git,然后填上项目的url,因为我把项目设置成了public,所以不需要配置用户名密码,之后对构建触发器Build periodically和Poll SCM进行设置(Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。我的配置如下:*/5 * * * *  (每5分钟检查一次源码变化)Build periodically:周期进行项目构建(它不care源码是否发生变化),我的配置如下:0 2 * * *  (每天2:00 必须build一次源码))之后在构建里面先选择Invoke Ant。之后在添加一个Execute shell,写上命令

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
if [ -f tag ]
then
   cnt=`cat tag`
   cnt=`expr $cnt + 1`;
   echo "$cnt" > tag;
else
   touch tag;
   cnt=1;
   echo "$cnt" > tag;
fi
 
if [ -f Dockerfile ]
then
     echo ‘success‘
else
   touch Dockerfile;
   echo "FROM tomcat:latest" >> Dockerfile
   echo "MAINTAINER zmc zmc@zmcheng.net" >> Dockerfile
   echo "ADD DockerDemo.war /usr/local/tomcat/webapps" >> Dockerfile
fi
 
tag1=$(($cnt%10));
tag2=$(($cnt/10%10));
tag3=$(($cnt/100));
 
echo -e "******n\n" | sudo -S docker build -t 172.16.163.70:5000/test2:v$tag3.$tag2.$tag1 .
echo -e "******n\n" | sudo -S docker push 172.16.163.70:5000/test2:v$tag3.$tag2.$tag1
echo -e "******n\n" | sudo -S docker run -d -P 172.16.163.70:5000/test2:v$tag3.$tag2.$tag1

完成一个简单Job的配置。简述一下上面cmd的意思,首先在当前目录下新建一个tag文件,利用这个tag文件可以确定当前镜像的版本(格式v0.0.0),之后在当前工程目录下新建Dockerfile,它依据的父镜像是tomcat:latest,然后将上面使用ant打成的war包放到当前镜像的/usr/local/tomcat/webapps下面,之后dcoker build打成镜像,docker push将镜像push到私库,最后运行此镜像。现在最大的好处就是只要你往github上传代码,jenkins就会帮你自动构建,并且你可以查看构建过程中产生的输出,这样你可以找到是哪里出的错。很好的工具,值得深入研究。

jenkins+git实现docker持续部署