devil20 发表于 2017-12-6 09:37:35

Docker+Jenkins_自动化持续集成

  声明:此技术文档仅供参考,并允许转发此博客。欢迎跟大家一起讨论技术  QQ:1747535503
  1、软件简述:
  Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
  Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
  这里有一个误区,Docker 跟Jenkins 并没有直接的联系,Jenkins 是实现自动打包的,打包完也是可以实现自动部署的,并不是没有Docker 就不可以实现自动部署了,这里我需要强调一点。之所以用Docker,是因为Docker 是一个相比较而言比较成熟的一种技术了,而且他的优势在于,可以实现隔离,可以在不同的操作系统跑应用(Windows,Linux)并且还可以做到日志分离。
  2、安装软件:
  2.1、安装 Jenkins:
  因为Jenkins 是java项目,所以需要安装可以运行java应用的环境,我这里使用Tomcat了(也可以用 jboss)。
  下载tomcat 并安装(JDK的安装请自行百度)



# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.0.M21/bin/apache-tomcat-9.0.0.M21.tar.gz
# tar zxf apache-tomcat-9.0.0.M21.tar.gz
# mv apache-tomcat-9.0.0.M21 /usr/local/tomcat9

  验证Tomcat 是否安装成功



# /usr/local/tomcat9/bin/version.sh
Using CATALINA_BASE:   /usr/local/tomcat9
Using CATALINA_HOME:   /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME:      /usr/local/jdk1.8/jre
Using CLASSPATH:       /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Server version: Apache Tomcat/9.0.0.M21
Server built:   May 4 2017 22:42:36 UTC
Server number:9.0.0.0
OS Name:      Linux
OS Version:   3.10.0-327.36.3.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_121-b13
JVM Vendor:   Oracle Corporation
  有了环境,我们就可以安装Jenkins了,就跟平时发布一样的步骤,这里我就不解释了吧!!!相信大神们都看不下去了



# wget http://mirrors.jenkins.io/war/latest/jenkins.war
# mv jenkins.war /usr/local/tomcat9/webapps/
# /usr/local/tomcat9/bin/startup.sh
# 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
  查看自己的密码 



# cat /root/.jenkins/secrets/initialAdminPassword
cdf09c86f86e436189639cf5230aa09a
  输完密码点击 Continue 按钮进行下一步

  左边是默认安装,右边是自定义安装,本地实验不需要特殊需求,所以选择默认安装了。
  附张正在装的图,页面还是蛮精美的

  如果无法安装,就是你的网络有问题,自己先把网络搞定了在说吧!
  安装完成后输入自己的用户名,密码等个人信息。然后Save and Finish一下,之后就可以启动Jenkins了

  至此Jenkins 安装完成。
  2.2、安装Docker
  安装Docker 建议
  ( RedHat | Centos ) 7.0以上版本



# yum -y install docker-io
# docker version
Client:
Version:         1.12.6
API version:   1.24
Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64
Go version:      go1.7.4
Git commit:      1398f24/1.12.6
Built:         Fri May 26 17:28:18 2017
OS/Arch:         linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
# systemctl start docker
  安装完毕,如果遇到不能安装的情况下,可以试下换yum源,我的腾讯云的服务器,所以用的是腾讯的yum源
  2.3、安装 maven
  因为项目中使用到了maven 所以需要把maven 融合到Jenkins 里面去 



# wget http://apache.fayea.com/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
# tar zxf apache-maven-3.5.0-bin.tar.gz
# 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
# 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 做个朋友认识下,谢谢!



Docker 命令集
   寻找网络镜像命令
         docker search centos
            
             # docker search centos
                         名字                                             描述                                             下载次数是否官方   是否是Dockerfile构建的
             INDEX       NAME                                             DESCRIPTION                                     STARS   OFFICIAL   AUTOMAT
             docker.io   docker.io/centos                                 The official build of CentOS.                   3301            

   下载镜像
         docker pull centos
   查看镜像
         docker images
   删除镜像
         docker rmi
   
容器命令
   启动容器
         docker run --name -h hostname
   启动容器2
         docker start CONTAINER ID
   停止容器
         docker stop CONTAINER ID
   查看容器
         docker ps -a
   进入容器
         docker exec | docker attach
   删除容器
         docker rm

进入后台运行容器
   docker attach 68e5c66ee5c9      退出自动停止运行容器

进入容器
   docker run --name mydocker -it docker.io/centos /bin/bash
         -d      进入后台运行
         --run    运行
         --name 指定名字
         -i      输入终端打开
         -t      开一个伪终端
         
进入容器不退出
1、进入容器
   docker run --name mydocker -it docker.io/centos /bin/bash
2、退出
3、启动容器
   docker ps -a查询ID号
   docker start ID号
4、获取Pid号
   docker inspect --format "{{.State.Pid}}" 68e5c66ee5c9
5、进入容器而不退出
   nsenter --target 19205 --mount --uts --ipc --net --pid    退出不停止运行容器
   如果没有这个命令,需要安装util-linux包    nsenter

6、懒人写法
   nsenter --target `docker inspect --format "{{.State.Pid}}" ID` --mount --uts --ipc --net --pid   
docker 网络访问
   docker run -P
         -P    随机映射
         -p    hostport:containerPort
         -p    ip:hostPort:containerPort
         -pip::containerPort
         -phostPort:containerPort
         -phostPort:containerPort
         
数据卷管理
   docker
         -v /data
         -v /src:/dsrc
         -v /src:/src:ro

容器的制作
   docker commit -m "my nginx" f443e801f545 shijia/my-nginx:v1
Docker file 的方式构建docker镜像
   
   FROM         他的妈妈是谁(基础镜像)
   MAINTAINER    告诉被人,你创造了他(维护者信息)
   RUN            你想让他干啥(把命令前面加上RUN)
   ADD         相当于cp命令(COPY文件,会自动解压)
   WORKDIR      相当于cd命令(当前工作目录)
   VOLUME      给我一个放行李的地方(目录挂载)
   EXPOSE      我要打开的门是啥(端口)
   RUN            奔跑吧,兄弟!(进程要一直运行下去)
   
   Docker 案例
   vim /opt/docker-file/nginx/Dockerfile
   
   # This is My first Dockerfile
   # Version 1.0
   # Author : Shijia Zhang
   #Base images
   FROM centos

   #MAINTAINER
   MAINTAINER ShiJia Zhang

   #ADD
   ADD pcre-8.37.tar.gz    /usr/local/src
   ADD nginx-1.9.3.tar.gz/usr/local/src

   #RUN
   RUN yum -y install wget gcc gcc-c++ make openssl-devel
   RUN useradd -s /sbin/nologin -M www

   #WORKDIR
   WORKDIR /usr/local/src/nginx-1.9.3
   #RUN
   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

   RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

   ENV PATH=/usr/local/nginx/sbin:$PATH
   EXPOSE 80
   CMD ["nginx"]
运行Dockerfile
   docker build -t nginx-file:v1 /opt/docker-file/nginx/
其他命令
   docker run -it --rm stree --cpu 1
   --rm    容器运行完即可删除
   --cpu    指定分多少颗CPU
页: [1]
查看完整版本: Docker+Jenkins_自动化持续集成