Docker+Jenkins_自动化持续集成
阅读原文时间:2021年04月20日阅读:1

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