天天看点

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

本文讲的是<b>部署流水线搭建小记:Docker、Jenkins、Java和Couchbase</b>【编者的话】这篇文章讲述了如何用Jenkins和Docker来为一个需要和数据库交互的Java应用创建部署流水线(deployment pipeline)。

Jenkins支持创建流水线。它使用一种基于Groovy的流水线领域特定语言(Pipeline DSL)的简单脚。

而这些脚本,通常名字叫<code>Jenkinsfile</code>。它定义了一些根据指定参数执行简单或复杂的任务的步骤。流水线创建好后,可以用来构建代码,或者编排从代码提交到交付过程中所需的工作。

对于我们本文中的应用,其基本的部署流程是这样的:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

开发者更新工作区

Jenkins收到通知

Jenkins克隆工作区

Jenkins创建一个Docker镜像

Jenkins运行测试

Jenkins将镜像推到Docker Hub

让我们开始吧!

先把Jenkins启动起来:

这条命令指定了Jenkin家目录的路径。家目录下面存放了所有的配置信息。同时指定了Jenkins的监听端口。这里指定的是9090端口。

启动Jenkins会在中终端中看到如下消息:

复制一下终端中显示的密码,这个密码会用来解锁Jenkins。

在浏览器中输入<code>localhost:9090</code>访问Jenkins,然后粘贴密码:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

点击<code>Next</code>进入下一步:

创建第一个如图所示的管理员用户:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

点击<code>Save and Finish</code>继续。

点击<code>Install suggested plugins</code>:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

然后就会安装好一批默认的插件:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

(很奇怪Ant和Subversion是默认的插件。)

然后会弹出登陆框:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

输入之前创建好的用户名和密码。

最后Jenkins就可以使用了。

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

不得不说,要安装好一个简单的Jenkins所需要的步骤不少。真的有必要需要这么多步骤才能开始使用Jenkins吗?能不能有一个更简单,更傻瓜,更偷懒的方式来开始使用Jenkins呢?希望能遵守管理优先原则(Convention-over-Configuration)然后提供一个预先配置好的一键安装包。

让我们在Jenkins中创建一个用来运行流水线的作业。

在Jenkins重启之后,他会显示一个登陆界面。输入之前创建的用户名和密码。这会把你带回到<code>Installing Plugins/Upgrade</code>页面。点击页面左上角的Jenkins图标,可看到主控制面板:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

点击<code>create new job</code>,作业的名字取做<code>docker-jenkins-pipeline</code>,类型选<code>Pipeline</code>。

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

点击OK按钮。

按照如图所示对流水线进行配置:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

这里我们使用了本地的仓库。你当然也可以选择托管在Github上的仓库。另外,这个仓库可以配置一个git钩子或者定时的轮询器来触发流水线的运行。点击<code>Save</code>按钮来保存配置。

在启动这个作业之前,Couchbase数据库需要显式地进行启动:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

点击<code>Build Now</code>你应该看见下图类似的输出:

部署流水线搭建小记:Docker、Jenkins、Java和Couchbase

看起来一切正常。

让我们来试着理解下背后发生了什么。

Jenkinsfile描述了流水线是如何构建的。从整体看它有四个阶段 - 打包、创建Docker镜像、运行应用和运行测试。每一个阶段在Jenkins的控制面板都是以一个方框显示的。每一个阶段花费的总体时间显示在每一个方框中间。

然后我们试着理解每一个阶段都做了什么事情。

打包:应用的的源码位于<code>webapp</code>目录下。而这一条Maven命令:

用来创建应用的JAR包。注意Maven项目也包含测试,但是这里被故意通过<code>-DskipTests</code>忽略了。

创建Docker镜像:应用的Docker镜像是使用<code>webapp</code>目录下的Dockerfile来构建的。这个镜像仅仅包含一个Fat JAR,可以通过<code>java -jar</code>来运行。

每一个镜像都使用构建编号打上了标签:

运行应用:运行应用需要运行应用的Docker容器。数据库容器的IP地址可以通过下面这条命令来查到:

数据库容器和应用容器同时运行在默认的<code>bridge</code>网络中。这可以让两个容器来互相沟通。也可以在swarm模式的集群中运行流水线,这需要创建并且使用覆盖网络。

运行测试:测试可以使用如下命令来进行:

另外一个痛点找不到关于全局变量语法的文档。只有在<code>&amp;lt;JENKINS-HOST&gt;:&amp;lt;JENKINS-PORT&gt;/job/docker-jenkins-pipeline/pipeline-syntax/globals</code>能找到相关内容。这一点点戳。

<b>原文发布时间为:</b>2016-10-08

<b>本文作者:</b>钟最龙

<b>本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。</b>

<b></b>

<b>原文标题:</b><b>部署流水线搭建小记:Docker、Jenkins、Java和Couchbase</b>