部署流水线搭建小记:Docker、Jenkins、Java和Couchbase
2023-09-27 14:27:26 时间
本文讲的是部署流水线搭建小记:Docker、Jenkins、Java和Couchbase【编者的话】这篇文章讲述了如何用Jenkins和Docker来为一个需要和数据库交互的Java应用创建部署流水线(deployment pipeline)。
Jenkins支持创建流水线。它使用一种基于Groovy的流水线领域特定语言(Pipeline DSL)的简单脚。
而这些脚本,通常名字叫Jenkinsfile。它定义了一些根据指定参数执行简单或复杂的任务的步骤。流水线创建好后,可以用来构建代码,或者编排从代码提交到交付过程中所需的工作。
流水线包括步骤(Step),节点(Node)和阶段(Stage)。流水线执行在节点上。节点是Jenkins安装的一部分。流水线通常包含多个阶段。一个阶段包含多个步骤。流水线上手指南可以查看到更多的内容。
对于我们本文中的应用,其基本的部署流程是这样的:
开发者更新工作区
Jenkins收到通知
Jenkins克隆工作区
Jenkins创建一个Docker镜像
Jenkins运行测试
Jenkins将镜像推到Docker Hub
应用的完整代码放在了GitHub仓库上。
应用位于仓库中的webapp目录。应用会借助Couchbase的Java SDK,使用一个到Couchbase数据库的连接,保存一个简单的JSON文档。应用同时包含一个测试,以验证数据库是否包含持久化的文档。
特别感谢@alexsotob在Jenkins配置上对我的帮助。
让我们开始吧!
下载并安装Jenkins 从jenkins.io下载Jenkins。这里使用的是Jenkins 2.21。
先把Jenkins启动起来:
这条命令指定了Jenkin家目录的路径。家目录下面存放了所有的配置信息。同时指定了Jenkins的监听端口。这里指定的是9090端口。
启动Jenkins会在中终端中看到如下消息:
复制一下终端中显示的密码,这个密码会用来解锁Jenkins。
在浏览器中输入localhost:9090访问Jenkins,然后粘贴密码:
点击Next进入下一步:
创建第一个如图所示的管理员用户:
点击Save and Finish继续。
点击Install suggested plugins:
然后就会安装好一批默认的插件:
(很奇怪Ant和Subversion是默认的插件。)
然后会弹出登陆框:
输入之前创建好的用户名和密码。
最后Jenkins就可以使用了。
不得不说,要安装好一个简单的Jenkins所需要的步骤不少。真的有必要需要这么多步骤才能开始使用Jenkins吗?能不能有一个更简单,更傻瓜,更偷懒的方式来开始使用Jenkins呢?希望能遵守管理优先原则(Convention-over-Configuration)然后提供一个预先配置好的一键安装包。
创建Jenkins作业 让我们在Jenkins中创建一个用来运行流水线的作业。
在Jenkins重启之后,他会显示一个登陆界面。输入之前创建的用户名和密码。这会把你带回到Installing Plugins/Upgrade页面。点击页面左上角的Jenkins图标,可看到主控制面板:
点击create new job,作业的名字取做docker-jenkins-pipeline,类型选Pipeline。
点击OK按钮。
按照如图所示对流水线进行配置:
这里我们使用了本地的仓库。你当然也可以选择托管在Github上的仓库。另外,这个仓库可以配置一个git钩子或者定时的轮询器来触发流水线的运行。点击Save按钮来保存配置。
让Jenkins进行构建 在启动这个作业之前,Couchbase数据库需要显式地进行启动:
这个问题会在编号9的问题修复之后得以解决。确保你可以使用用户名Administrator和密码password,通过 http://localhost:8091 来访问Couchbase。点击Data Bucket标签页可以看到创建的名为books的Bucket。
点击Build Now你应该看见下图类似的输出:
看起来一切正常。
让我们来试着理解下背后发生了什么。
Jenkinsfile描述了流水线是如何构建的。从整体看它有四个阶段 - 打包、创建Docker镜像、运行应用和运行测试。每一个阶段在Jenkins的控制面板都是以一个方框显示的。每一个阶段花费的总体时间显示在每一个方框中间。
然后我们试着理解每一个阶段都做了什么事情。
打包:应用的的源码位于webapp目录下。而这一条Maven命令:
用来创建应用的JAR包。注意Maven项目也包含测试,但是这里被故意通过-DskipTests忽略了。
通常,测试会分开放在一个下游的项目中。Maven项目创建一个应用的Fat JAR(译者注:Fat JAR是把项目所有类文件、资源文件和依赖打包在一起的JAR)文件并且包含所有的依赖。
创建Docker镜像:应用的Docker镜像是使用webapp目录下的Dockerfile来构建的。这个镜像仅仅包含一个Fat JAR,可以通过java -jar来运行。
每一个镜像都使用构建编号打上了标签:
运行应用:运行应用需要运行应用的Docker容器。数据库容器的IP地址可以通过下面这条命令来查到:
数据库容器和应用容器同时运行在默认的bridge网络中。这可以让两个容器来互相沟通。也可以在swarm模式的集群中运行流水线,这需要创建并且使用覆盖网络。
运行测试:测试可以使用如下命令来进行:
如果测试通过,镜像会被推送到Docker Hub。不管测试是否成功,运行结构都能捕获到。同时我们显示了try/catch/finally块在Jenkinsfile中的使用。如果测试通过了,那镜像就会推送到Docker Hub中。在我们这个例子中,它被推送到了这里。
待办事项 把测试移到一个下游的项目中(#7) 使用Git钩子或者轮询来触发流水线(#8) 自动化数据库的启动与停止(#9) 用Swarm模式下的Docker引擎集群来运行流水线(#10) 增加额外的配置来将镜像推送到bintray(#11) 另外一个痛点找不到关于全局变量语法的文档。只有在 JENKINS-HOST : JENKINS-PORT /job/docker-jenkins-pipeline/pipeline-syntax/globals能找到相关内容。这一点点戳。 “不是不可能,只是还没有实现” #sadpanda
docker | jenkins 自动化CI/CD,后端躺着把运维的钱挣了!(下) 在本篇文章中,将讲解使用jenkins帮助我们监听git仓库的变化,一旦有新的push到master分支,jenkins服务则从gitee主动拉取项目代码,构建新镜像(**借助上一节编写好的Dockerfile文件**),然后**删除同名旧镜像和旧容器,部署新容器**。
docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上) 打算分两篇文章讲解,这篇文章讲解使用docker将我们的项目文件构建为镜像,然后部署到腾讯云的服务器上(相当于手动完成一次部署),然后进行外网访问测试。
在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目 一般情况下,将一个项目部署到生产环境的流程如下: 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。 整个过程相当复杂而漫长,其中还需要输入不少的命令,比如上传代码,git的拉取或者合并分支等等。
docker搭建jenkins 自动化部署可以说是项目的必须,其中jenkins可以说是标配了。jenkins在持续集成、持续交付、持续部署方面做得都很好也就是常说的CI、CD。这篇文章就总结下使用docker来搭建jenkins的过程,并记录这中间踩过的坑,防止再踩,同时也为想要学习jenkins的同学提供一点借鉴。
Jenkins支持创建流水线。它使用一种基于Groovy的流水线领域特定语言(Pipeline DSL)的简单脚。
而这些脚本,通常名字叫Jenkinsfile。它定义了一些根据指定参数执行简单或复杂的任务的步骤。流水线创建好后,可以用来构建代码,或者编排从代码提交到交付过程中所需的工作。
流水线包括步骤(Step),节点(Node)和阶段(Stage)。流水线执行在节点上。节点是Jenkins安装的一部分。流水线通常包含多个阶段。一个阶段包含多个步骤。流水线上手指南可以查看到更多的内容。
对于我们本文中的应用,其基本的部署流程是这样的:
![1.png 1.png](http://dockerone.com/uploads/article/20161008/2c58405f8b0df793204e759a9206848e.png)
应用的完整代码放在了GitHub仓库上。
应用位于仓库中的webapp目录。应用会借助Couchbase的Java SDK,使用一个到Couchbase数据库的连接,保存一个简单的JSON文档。应用同时包含一个测试,以验证数据库是否包含持久化的文档。
特别感谢@alexsotob在Jenkins配置上对我的帮助。
让我们开始吧!
下载并安装Jenkins 从jenkins.io下载Jenkins。这里使用的是Jenkins 2.21。
先把Jenkins启动起来:
JENKINS_HOME=~/.jenkins java -jar ~/Downloads/jenkins-2.21.war --httpPort=9090
这条命令指定了Jenkin家目录的路径。家目录下面存放了所有的配置信息。同时指定了Jenkins的监听端口。这里指定的是9090端口。
启动Jenkins会在中终端中看到如下消息:
Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: (译文:Jenkins需要初始化的设置。我们已经为你创建好了一个管理员用户生成好了密码。请使用下面密码继续安装。) 3521fbc3d40448efa8942f8e464b2dd9 This may also be found at: /Users/arungupta/.jenkins/secrets/initialAdminPassword (译文:这个密码的内容同时也可以在`/Users/arungupta/.jenkins/secrets/initialAdminPassword`中找到。)
复制一下终端中显示的密码,这个密码会用来解锁Jenkins。
在浏览器中输入localhost:9090访问Jenkins,然后粘贴密码:
![2.png 2.png](http://dockerone.com/uploads/article/20161008/08fe9890b8881c7aaffb14de49f491e8.png)
点击Next进入下一步:
创建第一个如图所示的管理员用户:
![3.png 3.png](http://dockerone.com/uploads/article/20161008/03e8a8fadb2011efa93b945a694293e0.png)
点击Save and Finish继续。
点击Install suggested plugins:
![4.png 4.png](http://dockerone.com/uploads/article/20161008/60d43bf2b63424e09b00bd03c6b4d900.png)
然后就会安装好一批默认的插件:
![5.png 5.png](http://dockerone.com/uploads/article/20161008/38a3788e5ddf262a0fb3fde85c36073f.png)
(很奇怪Ant和Subversion是默认的插件。)
然后会弹出登陆框:
![6.png 6.png](http://dockerone.com/uploads/article/20161008/22ef80c022fda50aaa6a546bd81f6019.png)
输入之前创建好的用户名和密码。
最后Jenkins就可以使用了。
![7.png 7.png](http://dockerone.com/uploads/article/20161008/07c08ee6b65b381192c753171670dfe6.png)
不得不说,要安装好一个简单的Jenkins所需要的步骤不少。真的有必要需要这么多步骤才能开始使用Jenkins吗?能不能有一个更简单,更傻瓜,更偷懒的方式来开始使用Jenkins呢?希望能遵守管理优先原则(Convention-over-Configuration)然后提供一个预先配置好的一键安装包。
创建Jenkins作业 让我们在Jenkins中创建一个用来运行流水线的作业。
在Jenkins重启之后,他会显示一个登陆界面。输入之前创建的用户名和密码。这会把你带回到Installing Plugins/Upgrade页面。点击页面左上角的Jenkins图标,可看到主控制面板:
![8.png 8.png](http://dockerone.com/uploads/article/20161008/212325f1f91068b99ce674dd9706385d.png)
![9.png 9.png](http://dockerone.com/uploads/article/20161008/d1db8a936cb379a6c8d3bd30fc241292.png)
![10.png 10.png](http://dockerone.com/uploads/article/20161008/4194d90d750ad3f06f2d317caa277056.png)
让Jenkins进行构建 在启动这个作业之前,Couchbase数据库需要显式地进行启动:
docker run -d --name db -p 8091-8093:8091-8093 -p 11210:11210 arungupta/oreilly-couchbase:latest
这个问题会在编号9的问题修复之后得以解决。确保你可以使用用户名Administrator和密码password,通过 http://localhost:8091 来访问Couchbase。点击Data Bucket标签页可以看到创建的名为books的Bucket。
![11.png 11.png](http://dockerone.com/uploads/article/20161008/7b0645b88ab160c3e3b78fd93ab59132.png)
点击Build Now你应该看见下图类似的输出:
![12.png 12.png](http://dockerone.com/uploads/article/20161008/2231e0b2f902e4e71b0588d2df1c6670.png)
看起来一切正常。
让我们来试着理解下背后发生了什么。
Jenkinsfile描述了流水线是如何构建的。从整体看它有四个阶段 - 打包、创建Docker镜像、运行应用和运行测试。每一个阶段在Jenkins的控制面板都是以一个方框显示的。每一个阶段花费的总体时间显示在每一个方框中间。
然后我们试着理解每一个阶段都做了什么事情。
打包:应用的的源码位于webapp目录下。而这一条Maven命令:
mvn clean package -DskipTests
用来创建应用的JAR包。注意Maven项目也包含测试,但是这里被故意通过-DskipTests忽略了。
通常,测试会分开放在一个下游的项目中。Maven项目创建一个应用的Fat JAR(译者注:Fat JAR是把项目所有类文件、资源文件和依赖打包在一起的JAR)文件并且包含所有的依赖。
创建Docker镜像:应用的Docker镜像是使用webapp目录下的Dockerfile来构建的。这个镜像仅仅包含一个Fat JAR,可以通过java -jar来运行。
每一个镜像都使用构建编号打上了标签:
${env.BUILD_NUMBER}
运行应用:运行应用需要运行应用的Docker容器。数据库容器的IP地址可以通过下面这条命令来查到:
docker inspect
数据库容器和应用容器同时运行在默认的bridge网络中。这可以让两个容器来互相沟通。也可以在swarm模式的集群中运行流水线,这需要创建并且使用覆盖网络。
运行测试:测试可以使用如下命令来进行:
mvn test
如果测试通过,镜像会被推送到Docker Hub。不管测试是否成功,运行结构都能捕获到。同时我们显示了try/catch/finally块在Jenkinsfile中的使用。如果测试通过了,那镜像就会推送到Docker Hub中。在我们这个例子中,它被推送到了这里。
待办事项 把测试移到一个下游的项目中(#7) 使用Git钩子或者轮询来触发流水线(#8) 自动化数据库的启动与停止(#9) 用Swarm模式下的Docker引擎集群来运行流水线(#10) 增加额外的配置来将镜像推送到bintray(#11) 另外一个痛点找不到关于全局变量语法的文档。只有在 JENKINS-HOST : JENKINS-PORT /job/docker-jenkins-pipeline/pipeline-syntax/globals能找到相关内容。这一点点戳。 “不是不可能,只是还没有实现” #sadpanda
原文链接:Deployment Pipeline Using Docker, Jenkins, Java, and Couchbase(翻译:钟最龙)
原文发布时间为:2016-10-08
本文作者:钟最龙
本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。
原文标题:部署流水线搭建小记:Docker、Jenkins、Java和Couchbase
docker | jenkins 自动化CI/CD,后端躺着把运维的钱挣了!(下) 在本篇文章中,将讲解使用jenkins帮助我们监听git仓库的变化,一旦有新的push到master分支,jenkins服务则从gitee主动拉取项目代码,构建新镜像(**借助上一节编写好的Dockerfile文件**),然后**删除同名旧镜像和旧容器,部署新容器**。
docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上) 打算分两篇文章讲解,这篇文章讲解使用docker将我们的项目文件构建为镜像,然后部署到腾讯云的服务器上(相当于手动完成一次部署),然后进行外网访问测试。
在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目 一般情况下,将一个项目部署到生产环境的流程如下: 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。 整个过程相当复杂而漫长,其中还需要输入不少的命令,比如上传代码,git的拉取或者合并分支等等。
docker搭建jenkins 自动化部署可以说是项目的必须,其中jenkins可以说是标配了。jenkins在持续集成、持续交付、持续部署方面做得都很好也就是常说的CI、CD。这篇文章就总结下使用docker来搭建jenkins的过程,并记录这中间踩过的坑,防止再踩,同时也为想要学习jenkins的同学提供一点借鉴。
相关文章
- The superclass"javax.servlet.http.HttpServlet" was not found on the Java Build Path
- linux-Ubantu系统,基于java基础镜像,dockerfile源码编译安装opencv,重新制作docker镜像
- Docker for Java Developers
- Docker最全教程之使用Docker搭建Java开发环境(十七)
- Java: 线上故障如何快速排查?来看这套技巧大全(高德地图的总结)
- Docker:慕课网--第一个docker化的java应用
- 从Java视角理解CPU缓存(CPU Cache)
- 【Java】+图片相似度识别
- 第十九节:Java基本数据类型,循环结构与分支循环
- 基于Java实现(图形界面)聊天系统【100010282】
- Java Dom解析xml
- Java中必须了解的常用类
- docker 部署java web应用_使用Docker部署JavaWeb项目
- Java eclipse下 Ant build.xml实例详解
- Zdocker —— Java 开发的简易 Docker 管理工具
- java树型结构的数据展现设计
- java植物大战僵尸,我家ADC直呼内行,甚至喊出辅助牛逼、666