设为首页 收藏本站
查看: 1294|回复: 0

[经验分享] Docker+Jenkins_自动化持续集成

[复制链接]

尚未签到

发表于 2017-12-6 09:37:35 | 显示全部楼层 |阅读模式
  声明:此技术文档仅供参考,并允许转发此博客。欢迎跟大家一起讨论技术  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的安装请自行百度)



[iyunv@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
[iyunv@zabbix src]# tar zxf apache-tomcat-9.0.0.M21.tar.gz
[iyunv@zabbix src]# mv apache-tomcat-9.0.0.M21 /usr/local/tomcat9

  验证Tomcat 是否安装成功



[iyunv@zabbix src]# /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了,就跟平时发布一样的步骤,这里我就不解释了吧!!!相信大神们都看不下去了



[iyunv@zabbix src]# wget http://mirrors.jenkins.io/war/latest/jenkins.war
[iyunv@zabbix src]# mv jenkins.war /usr/local/tomcat9/webapps/
[iyunv@zabbix src]# /usr/local/tomcat9/bin/startup.sh
[iyunv@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
DSC0000.png

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



[iyunv@zabbix logs]# cat /root/.jenkins/secrets/initialAdminPassword
cdf09c86f86e436189639cf5230aa09a
  输完密码点击 Continue 按钮进行下一步
DSC0001.png

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

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

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



[iyunv@zabbix logs]# yum -y install docker-io
[iyunv@zabbix logs]# 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?
[iyunv@zabbix ~]# systemctl start docker
  安装完毕,如果遇到不能安装的情况下,可以试下换yum源,我的腾讯云的服务器,所以用的是腾讯的yum源
  2.3、安装 maven
  因为项目中使用到了maven 所以需要把maven 融合到Jenkins 里面去 



[iyunv@zabbix src]# wget http://apache.fayea.com/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
[iyunv@zabbix src]# tar zxf apache-maven-3.5.0-bin.tar.gz
[iyunv@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
[iyunv@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、创建一个新任务
DSC0004.png

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

DSC0006.png

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

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

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

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



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

     下载镜像
         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
         -p  ip::containerPort
         -p  hostPort:containerPort
         -p  hostPort: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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421075-1-1.html 上篇帖子: jenkins+docker 持续构建非docker in docker 下篇帖子: Jenkins配置AD域用户验证管理项目
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表