docker+jenkins实现自动化部署

Eric

背景

早上来到公司,我们做的第一件事情就是从源码库签出最新的源码,然后进行单元测试,如果发现失败的测试,会找相关的同事一起调试,修复错误代码。接着回到自己的工作上来,编写自己的产品代码。忙到午饭时间,代码编写得差不多了,测试也通过了,开心地享用午餐,然后休息。谁料QA小组又发过来了几个bug,没办法,先本地重现再说,于是熟练地用IDE生成了一个WAR包,部署到Web容器下,启动容器。看到熟悉的界面了,遵循bug报告,一步步重现了bug,快下班的时候,bug修好了,提交代码,在愉快中结束了一天的工作。仔细总结一下,我们会发现,除了编写源代码,我们每天有相当一部分时间花在了编译、打包和部署等烦琐且不起眼的工作上。如果我们现在还手工这样做,那成本也太高了,于是有人用软件的方法让这一系列工作完全自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有烦琐的步骤都能够自动完成。
image.png

工具介绍

image.png
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,通过提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
image.png
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
image.png
Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。

docker安装

操作系统:centos7.5
使用官方安装脚本自动安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh

使用yum命令安装
安装命令如下:
yum install -y docker
设置阿里仓库地址:
echo '{"registry-mirrors": ["https://3laho3y3.mirror.aliyuncs.com"]}' > /etc/docker/daemon.json
启动:systemctl start docker
设置开机自启:systemctl enable docker

rancher安装

命令:
docker run -d --name rancher-server -p 8080:8080 --restart=unless-stopped -e DEFAULT_CATTLE_CATALOG_URL='{"catalogs":{"library":{"url":"http://git.oschina.net/rancher/rancher-catalog.git","branch":"k8s-cn"}}}' rancher/server:stable && sudo docker logs -f rancher-server

-d(可选)在后台运行容器(即“分离”模式)并输出容器ID。如果您不指定此选项, 则在终端窗口中输出正在运行的此容器的Docker日志。
-p 8080:8080 映射(例如“发布”)rancher-server容器的端口8080到主机上的端口8080。 第一个数字代表主机上的端口,而最后一个代表容器的端口。
-e DEFAULT_CATTLE_CATALOG_URL='{"catalogs":{"library":{"url":"http://git.oschina.net/rancher/rancher-catalog.git","branch":"k8s-cn"}}}' 设置环境变量,默认的rancher商店地址国内访问缓慢

Jenkins安装

命令:
docker run \
-u root \
-d --name jenkins \
-p 8081:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean && sudo docker logs -f jenkins

-d(可选)在后台运行容器(即“分离”模式)并输出容器ID。如果您不指定此选项, 则在终端窗口中输出正在运行的此容器的Docker日志。
-p 8081:8080 映射(例如“发布”)jenkinsci/blueocean 容器的端口8080到主机上的端口8081。 第一个数字代表主机上的端口,而最后一个代表容器的端口。
-p 50000:50000(可选)将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000。
-v jenkins-data:/var/jenkins_home(可选,但强烈建议)映射在容器中的/var/jenkins_home 目录到具有名字 jenkins-data 的volume。 如果这个卷不存在,那么这个 docker run 命令会自动为你创建卷。 如果您希望每次重新启动Jenkins(通过此 docker run ... 命令)时保持Jenkins状态,则此选项是必需的 。 如果你没有指定这个选项,那么在每次重新启动后,Jenkins将有效地重置为新的实例。
-v /var/run/docker.sock:/var/run/docker.sock(可选 /var/run/docker.sock 表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许 jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。 如果运行声明式管道,其语法包含agent部分用 docker

Jenkins安装过程

image.png
image.png
image.png
image.png
image.png
image.png

Jenkins插件安装

image.png
image.png
1、在系统管理中的插件管理;
2、然后点击选插件,在右上角输入Git Parameter和Publish Over SSH,找到Git Parameter和Publish Over SSH后点击左下方的的直接安装

Publish Over SSH配置

image.png
image.png

Maven配置文件设置

image.png
image.png

Jenkins配置一个自由风格的项目

image.png
1、登录jenkins,点击新建任务
image.png
2、输入任务名称,然后有两项选择,一是选择构建一个自由风格的软件项目,确定即可;二是克隆已有项目,输入该项目名称,确定即可。
3、创建成功后会打开该任务的配置页面,如果选择的是2中的第二个选项,则已经有克隆目标任务的配置项,在此基础上进行修改即可。配置项页面说明如下:
(1)General:git项目选择参数化构建过程,填写内容参考下图;svn项目可不填写此项;
(2)源码管理:git项目选择git,svn项目选择svn,填写项目地址以及有权限的用户名和密码。
(3)构建触发器:可不填。
(4)构建环境:可不填。
(5)构建:(此步骤为maven打包)点击增加构建步骤,选择调用顶层maven目标,maven版本选择mm(预先设置),目标选择打包命令即可,一般为clean package,如果是多环境配置,则需要加上环境参数如-Pdemo;
(6)构建后操作:(此步骤为上传war及执行部署命令)点击添加构建后操作步骤,选择Send build artifacts over SSH,选择项目部署目标服务器(要提前配置,目前已配置好),并按如下填写部署属性及部署命令。多节点可多次添加构建后操作。
命令示例:
停掉tomcat的docker容器
docker stop tomcat_sdso
备份当前war包
mv /home/gcuser/dockercompose/sdso/tomcat/webapps/*.war /home/gcuser/dockercompose/sdso/tomcat/webapps/sdso.war.date +%Y%m%d%H%M%S
将上传过来的war包拷贝到目标路径,此处为tomcat的docker容器中webapps目录映射到主机上的目录
mv /home/gcuser/sdso.war /home/gcuser/dockercompose/sdso/tomcat/webapps/sdso.war
启动tomcat的docker容器
docker start tomcat_sdso

配置项-General

image.png

配置项-源码管理

image.png

配置项-构建

image.png

配置项-构建后操作

image.png

jenkins手动触发构建

image.png

阅读 1.4k

许涛,Java后端研发,web端研发经验丰富,主要负责pc端和移动端的企业级业务处理系统定制化开发,如:综合网管、ERP系统、故障处理平台、电子工单系统、辅助监控系统等。

8 声望
1 粉丝
0 条评论
你知道吗?

许涛,Java后端研发,web端研发经验丰富,主要负责pc端和移动端的企业级业务处理系统定制化开发,如:综合网管、ERP系统、故障处理平台、电子工单系统、辅助监控系统等。

8 声望
1 粉丝
宣传栏