web项目案例_Docker Swarm 构建Web应用

Docker构建和测试Web应用

技能目标:

· 了解Docker Swarm集群的应用

· 掌握Jenkins安装部署

· 掌握Jenkins发布WEB集群

10.1 案例分析

10.1.1 案例概述

在前面课程内容已经介绍Docker Swarm集群基础概念及安装部署,并且通过添加私有仓库,push或pull镜像等操作动作,完成集群部署任务。大家都知道在生产环境并没有那么简单,需要多个系统配合完成整套系统架构的维护。本章将引入Jenkins持续集成工具,完成线上代码的发布;讲解Jenkins的相关知识,并基于SVN、SSH技术实现自动构建、部署等功能。

10.1.2 案例前置知识点

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成,每次的集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早发现集成错误。简单来说,就是持续的定时的在多个团队成员的工作中进行集成,并且给予反馈。

持续集成需要开发人员一天多次的将代码集成到主干,并进行自动化编译、测试等操作,由于这种频繁集成,以及集成后及时开始的编译和测试,可以有效避免我们在提交代码时没有进行必要检查而导致的错误,以及一些超出预期效果的更改,从而保证代码的质量。

由于这种及时性,如果在一次提交后项目集成失败,可以快速的在这次提交中查找问题所在,缩小了找问题的范围,从而减少了一些debug时间。同时如果按照这种实践,那么我们的主干代码时刻都是正确的,这样我们可以更频繁的交付。

下面是Jenkins 特点:

1) 易于安装,比如war包、rpm的形式安装等;

2) 易于配置,所有配置都是通过其提供的web页面实现。

Jenkins 具有如下功能:

1) 集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过E-mail通知;

2) 生成JUnit/TestNG测试报告;

3) 分布式构建支持Jenkins能够让多台计算机一起构建/测试;

4) Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;

5) 支持扩展插件,可以开发适合自己团队使用的工具;

6) Jenkins一切配置都可以在Web页面上完成。有些配置如MAVEN_HOME和Email,只需要配置一次,所有的项目就都能用。当然也可以通过修改XML进行配置;

7) 支持Maven的模块(Module):Jenkins对Maven做了优化。因此它能自动识别Module,每个Module可以配置成一个job;

8) 测试报告聚合:所有模块的测试报告都被聚合在一起,结果一目了然,使用其他CI,这几乎是一件不可能完成的任务;

10.1.3 案例环境

1. 本案例环境

本案例环境采用5台服务器。前三台是Docker Swarm集群,第四台是代码版本控制系统,第五台是Jenkins持续集成工具。表10-1是本案例使用的五台服务器的环境介绍。

表10-1 Jenkins持续集成环境

2. 案例拓扑

图10.1是Jenkins发布的拓扑图。

a55a3d710fca32dff04db3311a130d3a.png

图10.1 Jenkins发布示意图

3. 案例需求

1) Jenkins持续集成将结合Docker Swarm实现完成Web应用部署发布。

2) 将在Jenkins主机创建发布目录发布到Docker Swarm 已创建好的Web服务应用目录。

4. 案例实现思路

1)基于Tomcat部署Jenkins持续集成工具;

2)安装部署Subversion;

3)安装Jenkins插件;

4)配置Publish over SSH插件;

5)创建一个新的工程项目;

6)验证Jenkins持续集成持续交付。

10.2 案例实施

使用SVN(版本控制器)作为Web应用的发布工具,按下述步骤完成Web应用的发布。

1) 部署Jenkins;

2) 部署SVN;

3) 安装Jenkins插件;

4) 添加凭据;

5) 配置插件;

6) 构建新工程项目;

7) 验证Jenkins持续集成持续交付。

下面将部署并配置Jenkins持续集成环境。

1.基于Tomcat部署Jenkins

基于前面课程已介绍Tomcat相关理论及部署内容,本章不做过多介绍。从官网http://mirrors.jenkins.io/war/2.118/下载 jenkins.war,保存到Jenkins服务器的 $CATALINA_BASE/webapps。启动Tomcat 会自动部署。在将jenkins.war部署到Tomcat目录后,在浏览器http://192.168.168.91:8080/jenkins ,如图10.2所示。

67e862eff8a0512793e6c5021d51cbcc.png

图10.2

通过图10.2可以很明显的看出Tomcat方式启动Jenkins已经成功。初次部署Jenkins,会生成一个初始登录密码。

[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword

909ce9e5e72440d2b90ea891ef8148d9

复制这段管理员密码,登录Jenkins,选择安装推荐插件,如图10.3所示。后续可以根据需求安装jenkins插件。Comment by 周 士昆: 是的。

39d19d9be9ca73f40c4bf8bd3bd00eda.png

图10.3

安装完插件后,会提示创建一个新用户,如图10.4所示。

72b4d157317adb872fd12e1c7db0d920.png

图10.4

用户第一次登录后选择"系统管理"按钮页面内容,如图10.5所示。

c7fd5682bb7241ce7085a07846033ebe.png

图10.5

2. 安装部署Subversion

Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统。它于 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。

相对于的RCS、CVS,SVN采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。说得简单一点,SVN就是用于多个人共同开发同一个项目,共用资源的目的。

下面是安装并部署Subversion的命令和结果。

[root@svn ~]# yum install subversion

[root@svn ~]# mkdir -p /kgc/svn

[root@svn ~]# svnadmin create /kgc/svn

[root@svn~]# vi /kgc/svn/conf/passwd

kgc-test=benet.com

[root@svn~]# vi /kgc/svn/conf/authz

[/]

kgc-test=rw

//编辑配置文件,注释去掉,前面不能留空格。

[root@svn~]#cd /kgc/svn/conf/

[root@svn conf]# cat svnserve.conf | grep -v "^#" | grep -v "^$"

[general]

anon-access = read

auth-access = write

password-db = passwd

authz-db = authz

realm = /kgc/svn

[sasl]

启动svn即可完成部署。

[root@svn conf]# svnserve -d -r /kgc/svn

创建分支,模拟提交代码。

[root@svn ~]# svn mkdir svn://192.168.9.231/product-station -m "mkdir by zsk create 2018-0807"

[root@svn ~]# svn list svn://192.168.9.231

product-station/

[root@svn ~]# svn checkout svn://192.168.9.231/product-station

[root@svn ~]# cd product-station/

[root@svn product-station]# vim index.html

kgc-web-version

[root@svn product-station]# svn commit -m 'commit'

正在发送 index.html

传输文件数据.

提交后的版本为 6。

3. 安装Jenkins插件

Jenkins 插件管理器允许安装新的插件和更新Jenkins服务器上的插件。Jenkins将连接到联机资料库,检索可用的和已更新的插件。如果Jenkins服务器无法直接连接到外部资源,也可以从Jenkins网站上下载,网址是http://mirror.xmission.com/jenkins/plugins/。

在已运行的Jenkins主页中,点击左侧的系统管理,找到管理插件选中"可选插件"选项卡进入如图10.6所示,在过滤搜索框中敲入要安装的SSH、Publish Over SSH、SSH Agent插件,并勾中其左侧的复选框即可开始安装操作。

2d463c17ab8ee7be592bc94916449e11.png

图10.6

完成SSH plugin、Publish Over SSH插件的安装后,在系统管理→系统设置页面显示出SSH Site配置选项。

4. Jenkins配置SSH Site

在配置ssh site选项前,必须先添加凭据。Jenkins的"Credentials"直译为"证书"、"凭据"。如果通过意译,那它的理解就是"钥匙",这个翻译对于使用者而言是最为容易理解的。

在配置SVN时,需要使用者提供相应的账号与密码进行登录。假如把要访问的URL地址理解为锁,那么所提供的账号与密码就对应于开这把锁的钥匙。所以说"Credentials"中所记录的就是各种各样的这种钥匙。这里的钥匙对应的锁是有多种可能的,可能是SVN,也可能是Git等,而"Credentials"就是对于这些钥匙所进行的统一管理。

在Jenkins的主页中点击【Credentials】按钮.如图10.7所示。

72d0cb6870b73827219a108d1605c166.png

图10.7

在【Credentials】页面中,点击【Jenkins】超链接跳转到【System】页面,如图10.8所示。

6e9efc89f5878c0d54af405a7afbda60.png

图10.8

点击导航条中【Add domain】超链接,跳转到【Add domain】页面,如图10.9所示,在这里,可以对credentials进行管理操作,创建账户名是"kgc-test"的Domain Name后,点击"OK"按钮。

22cf66ba800f1f7633bb5fbace289c3c.png

图10.9

创建完成域名后选择添加凭据,如图10.10所示,显示有六项数据,需要使用者关注。页面右侧第一行的"Kind"表示的是钥匙的种类,保持默认的"Username with password"选项;第二行的"Scope"表示的是作用域,仍然保持默认值"Global(Jenkins,nodes,items,all child items,etc)"; 第三行是"Username",需要填写所对应的svn账号。图10.10中输入的SVN管理员账户是"kgc-test";第四行的"Password"就是账号所对应的密码;第五行的"ID"不需要去填写,它自己会补全的;第六行的"Description"是账号的描述,可以填写"SVN拉取账户"。填写以上数据后,点击"OK"按钮进行保存。

76e10c80a75457bc0c028c1d986ebb2d.png

图10.10

查看新增的SVN拉取账号,如图10.11。

4a680b45c3b4d720418e0e740b218e45.png

图10.11

5. 配置Publish Over SSH

在所有Docker Swarm节点创建目录,命令如下:

[root@manager ~]#mkdir -p /usr/share/nginx/html

在Jenkins的主页面中,点击"系统管理"进入"系统设置"页面找到SSH Server作为后续Docker主机选项。该插件主要是通过SSH连接其他Linux机器,远程传输文件及执行Shell命令,填写IP地址,登录用户名和创建的路径,选择高级勾选Use password authentication, or use a different key填写Docker Swarm Manager节点root登录密码,之后选择Test Configuration测试,测试成功后选择保存,如图10.12所示。

注意:需要事先在Docker 所有节点创建/usr/share/nginx/html目录。

65ba2af60ae6a6ef2a7b6d5c7538a0ec.png

图10.12

6. 构建一个新工程项目

在Jenkins的主页面中,点击"新建任务",创建一个任务名kgc-test。选择构建一个自由风格的软件项目,点击"确定"按钮,如图10.13所示。

5554a3dcd97b30d4c0669c9b3242c839.png

图10.13

在刚刚创建kgc-test任务中,选择源码管理Subversion。在构建新任务时需要配置svn拉取代码地址。目的是将svn上面的代码拉取到Jenkins工作目录中(本案例中SVN拉取的工作目录是workspace/kgc-test),如图10.14所示。

0ba6a20ca3ec2d90ad54433decca65cf.png

图10.14

在kgc-test工程中,选择构建后操作中的send build artfacts over SSH进行配置,如图10.15所示。

23bedd533fc17e2bf71654e7889b1e01.png

图10.15

Exec command文本框中的命令参数如下,具体命令参数在前面课程中详细讲过,这里不再过多介绍。

docker service rm kgc-test

docker service create --name kgc-test --replicas 3 --mount type=bind,source=/usr/share/nginx/html,destination=/usr/share/nginx/html -p 88:80 nginx

kgc-test工程项目配置完成后,可以在Jenkins首页,点击kgc-test工程项目中"立即构建"按钮就可以构建此工程项目,如图10.16所示。

ee5fd9a970a0e3cced26198ec7797a91.png

图10.16

选择构建工程之后点击构建历史下面的#1,然后选择控制台输出即可看到正在构建中的console out日志信息,输出内容如下所示:

Updating svn://192.168.168.231/product-station at revision '2018-05-31T16:47:58.950 +0800' --quiet

Using sole credentials kgc-test/****** (svn拉取账户) in realm ' /kgc/svn'

At revision 2

No changes for svn://192.168.168.231/product-station since the previous build

SSH: Connecting from host [Jenkins]

SSH: Connecting with configuration [192.168.168.93] ...

SSH: EXEC: STDOUT/STDERR from command [docker service rm kgc-test

docker service create --name kgc-test --replicas 3 --mount type=bind,source=/usr/share/nginx/html,destination=/usr/share/nginx/html -p 88:80 nginx] ...

kgc-test

i7uk34pfy8c99frwud7iiq9hg

overall progress: 0 out of 3 tasks

1/3:

2/3:

3/3:

overall progress: 0 out of 3 tasks

overall progress: 0 out of 3 tasks

overall progress: 0 out of 3 tasks

overall progress: 0 out of 3 tasks

overall progress: 3 out of 3 tasks

verify: Waiting 5 seconds to verify that tasks are stable...

verify: Waiting 5 seconds to verify that tasks are stable...

verify: Waiting 5 seconds to verify that tasks are stable...

verify: Waiting 5 seconds to verify that tasks are stable...

verify: Waiting 5 seconds to verify that tasks are stable...

verify: Waiting 4 seconds to verify that tasks are stable...

verify: Waiting 4 seconds to verify that tasks are stable...

verify: Waiting 4 seconds to verify that tasks are stable...

verify: Waiting 4 seconds to verify that tasks are stable...

verify: Waiting 4 seconds to verify that tasks are stable...

verify: Waiting 3 seconds to verify that tasks are stable...

verify: Waiting 3 seconds to verify that tasks are stable...

verify: Waiting 3 seconds to verify that tasks are stable...

verify: Waiting 3 seconds to verify that tasks are stable...

verify: Waiting 3 seconds to verify that tasks are stable...

verify: Waiting 2 seconds to verify that tasks are stable...

verify: Waiting 2 seconds to verify that tasks are stable...

verify: Waiting 2 seconds to verify that tasks are stable...

verify: Waiting 2 seconds to verify that tasks are stable...

verify: Waiting 2 seconds to verify that tasks are stable...

verify: Waiting 1 seconds to verify that tasks are stable...

verify: Waiting 1 seconds to verify that tasks are stable...

verify: Waiting 1 seconds to verify that tasks are stable...

verify: Waiting 1 seconds to verify that tasks are stable...

verify: Waiting 1 seconds to verify that tasks are stable...

verify: Service converged

SSH: EXEC: completed after 7,604 ms

SSH: Disconnecting configuration [192.168.168.93] ...

SSH: Transferred 1 file(s)

Finished: SUCCESS

至此Jenkins结合Docker Swarm持续集成,告一段落了。

7. 验证Jenkins持续集成持续交付

查看Jenkins是否将svn拉下来的代码拷贝到远程主机192.168.168.93,从下面结果可以看到index.html已经拷贝成功。

[root@manager ~]# cd /usr/share/nginx/html/

[root@manager html]# ls

index.html

注意:Jenkins只是把index.html拷贝到了Wwarm Manager 节点,Node节点也需要拷贝index.html文件。

检查Docker Swarm创建是否成功,执行命令和执行结果如下所示。

[root@manager html]# docker service ps kgc-test

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS

oa7rlbjseg1x kgc-test.1 nginx:latest worker01 Running Running 6 minutes ago

ih9lb2ujn16m kgc-test.2 nginx:latest worker02 Running Running 6 minutes ago

zelzmrw2ah5k kgc-test.3 nginx:latest manager Running Running 6 minutes ago

通过浏览器访问,如图10.17所示。

7daebd2a7e18e361bd5fb4922041c275.png

图10.17

查看访问后容器日志,执行命令和执行结果如下所示。

[root@manager html]# docker service logs -f kgc-test

kgc-test.3.2213i1lu1l3s@manager | 10.255.0.2 - - [31/May/2018:09:17:39 +0000] "GET / HTTP/1.1" 200 12 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0" "-"

kgc-test.3.2213i1lu1l3s@manager | 10.255.0.2 - - [31/May/2018:09:17:47 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0" "-"

kgc-test.3.2213i1lu1l3s@manager | 10.255.0.2 - - [31/May/2018:09:17:47 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0" "-"

kgc-test.3.2213i1lu1l3s@manager | 10.255.0.2 - - [31/May/2018:09:17:47 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0" "-"

kgc-test.3.2213i1lu1l3s@manager | 10.255.0.2 - - [31/May/2018:09:17:47 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0" "-"

kgc-test.3.2213i1lu1l3s@manager | 10.255.0.2 - - [31/May/2018:09:17:47 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0" "-"

可以看到通过Jenkins执行脚本拉过来的应用已成功发布。

第 15 页 共 17 页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值