Docker+Jenkins_自动化持续集成

1、软件简述:

  Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

  Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

  这里有一个误区,Docker 跟Jenkins 并没有直接的联系,Jenkins 是实现自动打包的,打包完也是可以实现自动部署的,并不是没有Docker 就不可以实现自动部署了,这里我需要强调一点。之所以用Docker,是因为Docker 是一个相比较而言比较成熟的一种技术了,而且他的优势在于,可以实现隔离,可以在不同的操作系统跑应用(Windows,Linux)并且还可以做到日志分离。

2、安装软件:

  2.1、安装 Jenkins:

    因为Jenkins 是java项目,所以需要安装可以运行java应用的环境,我这里使用Tomcat了(也可以用 jboss)。

    下载tomcat 并安装(JDK的安装请自行百度)

1 [root@zabbix src]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.0.M21/bin/apache-tomcat-9.0.0.M21.tar.gz
2 [root@zabbix src]# tar zxf apache-tomcat-9.0.0.M21.tar.gz
3 [root@zabbix src]# mv apache-tomcat-9.0.0.M21 /usr/local/tomcat9

    验证Tomcat 是否安装成功

复制代码
 1 [root@zabbix src]# /usr/local/tomcat9/bin/version.sh 
 2 Using CATALINA_BASE:   /usr/local/tomcat9
 3 Using CATALINA_HOME:   /usr/local/tomcat9
 4 Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
 5 Using JRE_HOME:        /usr/local/jdk1.8/jre
 6 Using CLASSPATH:       /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
 7 Server version: Apache Tomcat/9.0.0.M21
 8 Server built:   May 4 2017 22:42:36 UTC
 9 Server number:  9.0.0.0
10 OS Name:        Linux
11 OS Version:     3.10.0-327.36.3.el7.x86_64
12 Architecture:   amd64
13 JVM Version:    1.8.0_121-b13
14 JVM Vendor:     Oracle Corporation
复制代码

 

    有了环境,我们就可以安装Jenkins了,就跟平时发布一样的步骤,这里我就不解释了吧!!!相信大神们都看不下去了

[root@zabbix src]# wget http://mirrors.jenkins.io/war/latest/jenkins.war
[root@zabbix src]# mv jenkins.war /usr/local/tomcat9/webapps/
[root@zabbix src]# /usr/local/tomcat9/bin/startup.sh
[root@zabbix webapps]# netstat -lptun | grep 8080
tcp        4      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      31160/java          

 

    OK我们来验证下,并完成后续步骤

    打开浏览器,最好使用谷歌,或者火狐。在地址栏输入http://IP:8080/jenkins

这里需要输入密码,密码按照提示寻找,正常情况下应该是在:/root/.jenkins/secrets/initialAdminPassword

  查看自己的密码 

1 [root@zabbix logs]# cat /root/.jenkins/secrets/initialAdminPassword
2 cdf09c86f86e436189639cf5230aa09a

 

  输完密码点击 Continue 按钮进行下一步

  

左边是默认安装,右边是自定义安装,本地实验不需要特殊需求,所以选择默认安装了。

附张正在装的图,页面还是蛮精美的

如果无法安装,就是你的网络有问题,自己先把网络搞定了在说吧!

安装完成后输入自己的用户名,密码等个人信息。然后Save and Finish一下,之后就可以启动Jenkins了

  至此Jenkins 安装完成。

  2.2、安装Docker

    安装Docker 建议

      ( RedHat | Centos ) 7.0以上版本

复制代码
 1 [root@zabbix logs]# yum -y install docker-io
 2 [root@zabbix logs]# docker version
 3 Client:
 4  Version:         1.12.6
 5  API version:     1.24
 6  Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64
 7  Go version:      go1.7.4
 8  Git commit:      1398f24/1.12.6
 9  Built:           Fri May 26 17:28:18 2017
10  OS/Arch:         linux/amd64
11 Cannot connect to the Docker daemon. Is the docker daemon running on this host?
12 [root@zabbix ~]# systemctl start docker
复制代码

 

     安装完毕,如果遇到不能安装的情况下,可以试下换yum源,我的腾讯云的服务器,所以用的是腾讯的yum源

  2.3、安装 maven

    因为项目中使用到了maven 所以需要把maven 融合到Jenkins 里面去 

[root@zabbix src]# wget http://apache.fayea.com/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
[root@zabbix src]# tar zxf apache-maven-3.5.0-bin.tar.gz 
[root@zabbix src]# mv apache-maven-3.5.0 /usr/local/mvn

 

    添加环境变量:追加两行到/etc/profile   最后验证是否安装成功mvn -v

复制代码
export MAVEN_HOME=/usr/local/mvn
export PATH=$PATH:$MAVEN_HOME/bin
[root@zabbix src]# mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/mvn
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-327.36.3.el7.x86_64", arch: "amd64", family: "unix"
复制代码

 

 至此,软件安装完毕。  

 3、创建一个项目

    先配置一下Jenkins 

    首页–> 系统管理 –> Global Tool Configuration –> 新增“jdk Maven Docker”  #注意:是三个,不是一个,如果路径不对,会有报错的

    最后不要忘记,Save下    # 使用svn的小伙伴注意了:“如果没有新增svn 可以在插件管理选项中安装svn 插件后即可新增svn,这个自行百度。”

  3.1、创建一个新任务

    

 点击图片中的 开始创建一个新任务,这里创建一个自由风格的软件项目,并书写上项目名称,点击OK进行下一步操作

    

       

     源码管理,我这里使用git的方式来管理项目,我这里去开源中国找一个免费开源项目来进行测试。

         

    正常的构建项目只需要做好源码管理即可,如需要使用Docker  使用shell即可调用。触发器的作用相当于触发某个条件,就会立即去构建,不必后期的手工构建了。

     

      点击类似时钟的图标,点击立即构建,然后他会自动去打包,如果成功,S下面的图标会显示为蓝色,右边为太阳的图标。至此项目构建完成。

      

4、最后附上 Docker 常用命令:会用Docker的大神请略过,并希望可以加个QQ:1747535503 做个朋友认识下,谢谢!

复制代码
  1 Docker 命令集
  2     寻找网络镜像命令
  3         docker search centos
  4             
  5             [root@test ~]# docker search centos
  6                         名字                                             描述                                             下载次数  是否官方   是否是Dockerfile构建的 
  7             INDEX       NAME                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMAT
  8             docker.io   docker.io/centos                                 The official build of CentOS.                   3301      [OK]       
  9 
 10     下载镜像
 11         docker pull centos
 12     查看镜像
 13         docker images
 14     删除镜像
 15         docker rmi
 16     
 17 容器命令
 18     启动容器
 19         docker run --name -h hostname
 20     启动容器2
 21         docker start CONTAINER ID
 22     停止容器
 23         docker stop CONTAINER ID
 24     查看容器
 25         docker ps -a 
 26     进入容器
 27         docker exec | docker attach
 28     删除容器
 29         docker rm
 30 
 31 进入后台运行容器
 32     docker attach 68e5c66ee5c9        退出自动停止运行容器
 33 
 34 进入容器
 35     docker run --name mydocker -it docker.io/centos /bin/bash
 36         -d        进入后台运行
 37         --run    运行
 38         --name 指定名字
 39         -i        输入终端打开
 40         -t        开一个伪终端
 41         
 42 进入容器不退出
 43 1、进入容器
 44     docker run --name mydocker -it docker.io/centos /bin/bash
 45 2、退出
 46 3、启动容器
 47     docker ps -a查询ID号
 48     docker start ID号
 49 4、获取Pid号
 50     docker inspect --format "{{.State.Pid}}" 68e5c66ee5c9
 51 5、进入容器而不退出
 52     nsenter --target 19205 --mount --uts --ipc --net --pid    退出不停止运行容器
 53     如果没有这个命令,需要安装util-linux包    nsenter
 54 
 55 6、懒人写法
 56     nsenter --target `docker inspect --format "{{.State.Pid}}" ID` --mount --uts --ipc --net --pid    
 57 docker 网络访问
 58     docker run -P 
 59         -P    随机映射
 60         -p    hostport:containerPort
 61         -p    ip:hostPort:containerPort
 62         -p  ip::containerPort
 63         -p  hostPort:containerPort
 64         -p  hostPort:containerPort
 65         
 66 数据卷管理
 67     docker 
 68         -v /data
 69         -v /src:/dsrc
 70         -v /src:/src:ro 
 71 
 72 容器的制作
 73     docker commit -m "my nginx" f443e801f545 shijia/my-nginx:v1
 74 Docker file 的方式构建docker镜像
 75     
 76     FROM         他的妈妈是谁(基础镜像)
 77     MAINTAINER    告诉被人,你创造了他(维护者信息)
 78     RUN            你想让他干啥(把命令前面加上RUN)
 79     ADD         相当于cp命令(COPY文件,会自动解压)
 80     WORKDIR        相当于cd命令(当前工作目录)
 81     VOLUME        给我一个放行李的地方(目录挂载)
 82     EXPOSE        我要打开的门是啥(端口)
 83     RUN            奔跑吧,兄弟!(进程要一直运行下去)
 84     
 85     Docker 案例
 86     vim /opt/docker-file/nginx/Dockerfile
 87     
 88     # This is My first Dockerfile
 89     # Version 1.0
 90     # Author : Shijia Zhang
 91 
 92     #Base images
 93     FROM centos
 94 
 95     #MAINTAINER
 96     MAINTAINER ShiJia Zhang
 97 
 98     #ADD
 99     ADD pcre-8.37.tar.gz    /usr/local/src
100     ADD nginx-1.9.3.tar.gz  /usr/local/src
101 
102     #RUN
103     RUN yum -y install wget gcc gcc-c++ make openssl-devel
104     RUN useradd -s /sbin/nologin -M www
105 
106     #WORKDIR
107     WORKDIR /usr/local/src/nginx-1.9.3
108 
109     #RUN
110     RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install
111 
112     RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
113 
114     ENV PATH=/usr/local/nginx/sbin:$PATH
115     EXPOSE 80
116 
117     CMD ["nginx"]
118 运行Dockerfile
119     docker build -t nginx-file:v1 /opt/docker-file/nginx/
120 其他命令
121     docker run -it --rm stree --cpu 1
122     --rm    容器运行完即可删除
123     --cpu    指定分多少颗CPU
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐