博亚体育app下载 - 博亚体育官网 0481-61676529

微服务架构实战:使用Jenkins实现自动化构建

作者:博亚体育app 时间:2021-07-27 00:37
本文摘要:使用Jenkins实现自动化构建一个大型平台的微服务架构设计通常会发生许多项目工程,因此会有许多服务和应用需要部署,而且需要不停地迭代和更新,这是一个庞大的工程,所以我们需要借助自动化工具,实现各个微服务工程的CICD事情流程。CICD是连续集成(Continuous Integration)和连续部署(Continuous Deployment)的总称,是指通过自动化的构建、测试和部署,实现软件产物可循环使用的快速交付流程。

博亚体育app

使用Jenkins实现自动化构建一个大型平台的微服务架构设计通常会发生许多项目工程,因此会有许多服务和应用需要部署,而且需要不停地迭代和更新,这是一个庞大的工程,所以我们需要借助自动化工具,实现各个微服务工程的CICD事情流程。CICD是连续集成(Continuous Integration)和连续部署(Continuous Deployment)的总称,是指通过自动化的构建、测试和部署,实现软件产物可循环使用的快速交付流程。Jenkins是一个基于Java开发的功效强大的自动化构建工具,而且有一个很是富厚的插件堆栈,可以很好地扩充和富厚其自己的功效。

因此,Jenkins是实现自动化构建的一个很不错的工具。单击Jenkins首页上的Plugins选项,可以检察种种插件的先容,如图15-1所示。

本章我们使用Jenkins,联合Maven、Docker、Selenium和JMeter等工具,建设一个可连续交付的自动化设施。连续交付事情流程从代码提交开始,建设一个包罗自动测试和自动部署的连续交付事情流程如图15-2所示。这个事情流程的步骤如下所示:(1)开发者向GitLab提交接码。

(2)GitLab使用 WebHook通知Jenkins有代码更新。(3)Jenkins 从节点(Slave)拉取代码,打包并构建镜像。

(4)Jenkins使用从节点上构建的镜像运行测试用例。(5)如果测试(Test)通过,则将镜像推送到镜像堆栈。

(6)Jenkins在应用服务器上举行更新部署。(7)Jenkins将构建陈诉以邮件方式通知开发者。在开发者向代码库提交接码之后,整个流程都是自动举行的。

如果中间某个环节泛起错误,则中止流程的执行,并将效果通知相关人员。提交的代码不仅包罗应用法式,还包罗构建镜像的剧本、测试用例的剧本和部署的编排剧本等。

其中,各个步骤的操作可以使用插件或直接在下令行中使用种种工具来完成。例如,拉取项目代码会用到Git插件;打包项目会用到 Maven;构建镜像和应用部署可直接通过下令行使用Docker或docker-compose;集成测试可通过下令行执行由Selenium、JMeter等生成的剧本。下面,我们通过一个简朴的案例,演示和说明Jenkins 的使用方法。

Jenkins的安装下面的安装历程以MacOS为例举行说明。因为Jenkins需要JVM的支持,所以请确保机械上已经安装了JDK 1.8或以上版本。为了完成后面的自动化演示,请确保机械中已经安装了Maven、Git客户端和 Docker等。打开Jenkins官网,进入下载页面,选择左边的LTS稳定版中的Mac OSX版本举行下载,如图15-3所示。

下载完成后,单击安装包“jenkins-2.89.1.pkg”开始安装。安装历程比力简朴,直接单击“继续”按钮,按提示使用系统推荐使用的插件即可。安装完成后,通过下列网址打开当地的Jenkins控制台:http://localhost:8080第一次打开后会看到如图15-4所示页面。

按图15-4的提示打开治理员密码文件,把密码复制并粘贴到密码输入框中,单击右下角的Continue 按钮。如果密码验证乐成,则会提示读者建立一个操作员用户。在建立用户之后,即可登录Jenkins控制台。

新用户登录的接待界面如图15-5所示。Jenkins的基本设置由于要用到Maven编译和打包,所以单击接待界面的“系统治理”→“全局工具设置”选项,如图15-6所示,打开“全局工具设置”对话框。

在“全局工具设置”对话框中单击“Maven安装”选项,设置一个名字,并设置Maven的安装路径,如图15-7所示。单击图15-6中的“治理插件”选项,从弹出的对话框中单击“可选插件”选项,找到“Maven Invoker plugin”插件,勾选后单击“直接安装”按钮,如图15-8所示。注意,在设置settings.xml设置中的repositys路径时,如果是在本机测试,则最好与IDEA的设置相同,这样打包时将不用再重新下载一次依赖包。在Jenkins的下令行设置中,为了能够正常使用Docker 和 docker-compose,我们需要对Jenkins的系统权限举行设置。

因为Jenkins 使用默认用户“jenkins”开启服务,所以权限设置就是为这个用户举行授权。通过如下操作步骤,为“jenkins”用户设置一个免密码设置,这样,在Jenkins 的下令行设置中,就可以使用超级治理员的下令“sudo”了。在MacOS的终端中,执行下列下令,切换到超级治理员root输入root的密码:appledeMacBook-Air:/ apples suPassword:编辑“sudoers”,并找到如下所示信息:sh-3.2# vi/etc/sudoers# root and users in group wheel can run anything on any machine as any userrootALL = (ALL) ALL%adminALL- (ALL) ALL在上面信息的后面,参照root的权限设置,添加如下所示的设置并生存:jenkins ALL=(ALL) NOPASSWD: ALL%admin ALL=(ALL) NOPASSWD: ALL使用“dscl”下令把“jenkins”用户加进 admin用户组中,这个下令等同于Linux操作系统中的“usermod”下令:sh-3.2# dscl . -append /Groups/admin GroupMembership jenkins至此,就完成了Jenkins的权限设置。

Jenkins的自动部署实例为了演示Jenkins的使用,下面建立一个自动部署实例。在这个实例中使用的是一个功效很是简朴的项目,项目中只有一个主法式,代码如下所示@SpringBootApplication@RestControllerpublic class DemoApplication {public static void main (String[] args){SpringApplication.run(DemoApplication.class,args) ;}@RequestMapping (value = "/")public String index(){return "Hello world! ";}}应用启动后,打开首页将输出“Hello World!”。下面先容这个自动部署项目的实现历程。

建立任务在Jenkins首页中单击“新建”选项,打开建立任务页,如图15-9所示。输入任务名称“demo”,并选择“构建一个自由气势派头的软件项目”选项,单击“确定”按钮,即可建立一个空任务,如图15-10所示。设置任务在图15-10中,单击“源码治理”选项,显示如图15-11所示对话框。

在图15-11中勾选“Git选项,在代码库的地址栏中输入“demo”项目的存放地址。因为这是一个公然项目,所以不用设置会见项目的权限。如果是一个私有项目,则必须在图15-11的“Credentials”中设置对项目有存取权限的用户名和密码。单击图15-11中的“构建触发器”选项,在“构建触发器”对话框中勾选“Poll SCM”选项,设置一个定时任务的日程表,如图15-12所示。

图15-12中的日程表“00 20***”,表现在天天的20:00点整执行任务构建。在本实例中不使用定时任务。

接下来,使用 Maven 设置项目的打包。单击“构建”选项,在“增加构建步骤”下拉列表中选择“Invoke top-level Maven targets”选项,如图15-13所示。其中,在“Maven Version”中选择前面安装的Maven,在“Goals”中输人如下所示的打包下令:clean package设置建立镜像和部署的操作下令,这里会用到Dockerfile和 docker-compose.yml,这两个文件已经包罗在项目工程的docker目录中。

Dockerfile 中的内容如下所示:FROM java:8VOLUME/tmpADDdemo-0.0.1-SNAPSHOT.jar app.jarRUN bash 一c'touch /app.jar'EXPOSE8080ENTRYPOINT, "/app.jar"]["java", "-Djava.security.egd=file:/dev/./urandom", "-jardocker-compose.yml中的部署剧本如下所示:demo:build:ports:"8888:8080"单击“构建”选项,在“增加构建步骤”下拉列表中选择“Execute shell”选项,在“Command"中输入如下所示下令:cd /Users/Shared/Jenkins/Home/workspace/demo /dockercp -f ../target/demo-0.0.1-SNAPSHOT .jarsudo /usr/local/bin/docker-compose down --rmi allsudo /usr/local/bin/docker-compose up -d这些下令与我们在主机上直接使用Docker等工具部署应用的下令相同,即先停止正在运行的容器,再删除容器和镜像,最后重新举行部署,如图15-14所示。执行任务当手动执行任务时,首先单击任务的名称,返回任务首页。

然后在任务首页中单击左侧菜单中的“立刻构建”选项即可,如图15-15所示。在任务执行历程中,会在控制台中输出信息,一个完整的执行历程的输出日志如下所示Started by user mr.csjBuilding in workspace /Users/Shared/Jenkins/Home/workspace/demo>git rev-parse --is-inside-work-tree # timeout=10Fetching changes from the remote Git repository>git config remote.origin.url https://gitee.com/chenshaojian/demo.git #timeout=10Fetching upstream changes from https://gitee.com/chenshaojian/demo.git>git --version # timeout=10>git fetch --tags --progress https://gitee.com/chenshaojian/demo.git+refs/heads/* :refs/remotes/origin/*>git rev-parse refs/remotes/origin/master^ { commit] # timeout=10>git rev-parse refs/remotes/origin/origin/master"{ commit}# timeout=10Checking out Revision 1b0348a999cee3a1920b1b20576b54e58a50ab2(refs/remotes/origin/master)>git config core.sparsecheckout # timeout=10>git checkout-f 1b0348a999cee3a1920b1b2c576b54e58a50ab2Commit message: "add docker-compose">git rev-list 8791f0a371ab67a83d1005197744475de5f177df # timeout=10[demo]$/Users/apple/apache-maven-3.5.0/bin/mvn clean package[INFO]Scanning for projects. . .[INFO][INFO]-------------[INFO] Building demo 0.0.1-SNAPSHOT[INFO][INFO][INFO]--- maven-clean-plugin:2.6.1:clean (default-clean)& demo ---[INFO] Deleting /Users/Shared/Jenkins/Home/workspace/demo/target[INFO][INFO] ---maven-resources-plugin:2.6:resources (default-resources)& demo -[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO]Copying 1 resource[INEO]Copying 0 resource[INFO][INFO] --- maven-compiler-plugin:3.1:compile (default-compile) demo ---[ INFO] Changes detected - recompiling the module![INFO] Compiling 1 source file to/Users/Shared/Jenkins/Home/workspace/demo/target/classes[INEO][INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) edemo ---[INFO] Using 'UTF-8'encoding to copy filtered resources.[INFO] skip non existing resourceDirectory/Users/Shared/Jenkins/Home/workspace/demo/src/test/resources[INFO][INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)Cdemo[INFO] Changes detected - recompiling the module![INFO] Compiling 1 source file to/Users/Shared/Jenkins/Home/workspace/demo/target/test-classes[INEO][ INFO] ---maven-surefire-plugin:2.20:test (default-test) C demo ---[INFO] Tests are skipped.[INFO][INFO] --- maven-jar-plugin:2.6:jar (default-jar) demo --[INFO] Building jar:/Users/Shared/Jenkins/Home/workspace/demo/target/demo-0.0.1-SNAPSHOT.jar[INFO][INFO] --- spring-boot-maven-plugin:1.5.8.RELEA.SE:repackage (default) demo[INFO][INEO] BUILD SUCCESS[INFO][INFO]Total time: 5.095 s[INFO] Finished at: 2017-10-30T16:18:18+08:00[INFO] Final Memory:29M/182M[INFO][demo]$ /bin/sh -xe/Users/Shared/Jenkins/tmp/jenkins4696633078670494346.sh+cd /Users/Shared/ Jenkins/Home/workspace/demo/docker+ cp -f ../target/demo-0.0.1-SNAPSHOT.jar .+ sudo /usr/local/bin/docker-compose down --rmi allRemoving image docker_demoFailed to remove image for service demo:404 Client Error: Not Found ("No suchimage: docker_demo: latest")+ sudo /usr/local/bin/docker-compose up -dBuilding demoStep 1/6 : FROM java: 8--->d23bdf 5b1b1bStep 2/6:VOLUME /tmp---> Using cache--->64c36a425bbfStep 3/6: ADD demo-0.0.1-SNAPSHOT.jar app.jar--->1788813d23d2step 4/6:RUN bash-c 'touch /app.jar'---> Running in e4cfd4447b78--->2c44a754963bRemoving intermediate container e4cfd4447b78Step 5/6 :EXPOSE 8080---> Running in 95b96954618e---> 8bc53f642637Removing intermediate container 95b96954618eStep 6/6:ENTRYPOINT java-Djava.security.egd=file:/dev/./urandom-jar/app.:一-->Running in al92a418f4f1--->3a27629ceba9Removing intermediate container a192a4184f1Successfully built 3a27629ceba9Successfully tagged docker demo: latestImage for service demo was built because it did not already exist. To rebuithis image you must use `docker-compose build' or 'docker-compose up --buildCreating docker demo_1..Creating docker_demo_1-[1A-[2KCreating docker demo 1 ...一[ 32mdone-[Om--[1BFinished:sUCCESS从控制台的输出日志中可以看到构建已经乐成完成。这时,我们可以通过下面的网址打开应用运行的首页:http://localhost:8888从中可以看到我们预期的效果,即输出“Hello World!”,如图15-16所示。在本节的输出日志中,有一个如下所示的错误提示:+ sudo /usr/local /bin/docker-compose down --rmi allRemoving image docker demoFailed to remove image for service demo:404 Client Error:Not Found ("No suchimage: docker demo: latest")泛起这个错误提示的原因是在第一次构建时,并不存在可以移除的镜像,但这并不影响整个构建历程的执行。

现在验证一下项目更新的自动化部署效果。首先将项目主法式的输出效果“Hello World ! ”改为“Hello Jerkins! ”,然后提交接码。完成之后,再在Jenkins 中单击“立刻构建”选项,构建完成后,刷新会见应用的浏览器,即可看到如图15-17所示的效果。再次检察控制台的输出日志,现在,移除镜像的下令已经不再显示错误,而是输出了如下所示的效果,表现已经停止了运行的容器,并移除了原来的容器和镜像:+ sudo /usr/local/bin/docker-compose down--rmi allStopping docker demo 1 ...-[1A-[2KStopping docker demo 1 ... -[32mdone-[ Om-[1BRemoving docker demo 1 ...一-[1A[2KRemoving docker demo 1 ...-[32mdone-[ Om一[1BRemoving image docker demo这里只是一个简朴的自动部署的演示,在实际使用中,可以通过定时任务,或联合使用WebHook 的代码提交通知,实现自动部署。

另外,还可以通过Selenium、JMeter等工具生成测试剧本,增加自动测试的功效。小结本章先容了如何使用自动化构建工具Jenkins 设计连续交付的事情流程,并以一个简朴的实例演示了自动部署的实现历程。在该实例中,我们使用Git举行代码拉取、使用 Maven举行法式打包、使用Docker举行镜像的建立和应用的更新与部署。

从这个实例中可以看出Jenkins的强大的可扩展性。通过对本章的学习,相信读者能够凭据实际情况,建设一个完善的自动化基础设施,从而实现在微服务公布中集成测试和连续部署的自动化构建流程。

本文给大家解说的内容是微服务架构实战:使用Jenkins实现自动化构建下篇文章给大家解说的是通用源码阅读mybatis源码详解:源码阅读的意义、方法;以为文章不错的朋侪可以转发此文关注小编;谢谢大家的支持!。


本文关键词:微,服务,架构,实战,使用,Jenkins,实现,博亚体育app,自动化

本文来源:博亚体育app-www.whhfqm.com