Jenkins 入门教程之三 Jenkins 与 SVN 持续集成实战
下面的实战内容是在上篇内容的基础上进行操作的,为了保证连贯性,建议先将上篇的操作步骤执行完再阅读本篇内容。
通过 Eclipse 创建基于 Maven 的 SpringBoot Web 项目,用于测试 Maven 构建项目
创建 Maven 项目的时候,Archetype 选择”maven-archetype-quickstart”,此 SpringBoot Web 项目不需要 web.xml,只需在 pom.xml 配置文件里指定 packaging 为 war 类型即可。项目内容很简单,访问 JSP 页面直接输出字符串 “hello Jim”。项目源码下载链接已经给出,下载解压后直接导入项目到 Eclipse,执行”spring-boot:run” 命令即可运行项目,浏览器输入以下地址验证是否运行正常:http://127.0.0.1:8080/demo/hello
,点击下载完整的代码 、点击下载 SHA256 校验文件。
在 Eclipse 里创建 SVN 资源库,并将 SpringBoot Web 项目的源码提交 SVN 资源库
这里的 SVN 资源库是上一篇教程里创建的 Subversion 仓库 jenkins-repo,访问的用户名是 jenkins,密码是 123456;因为宿主机与 Docker 容器(SVN)配置了端口映射,因此 Eclipse 里可以直接使用以下 URL 访问对应的 SVN 仓库: http://127.0.0.1:9126/svn/jenkins-repo
将 jenkins-study 项目的源码提交到 SVN 资源库后的目录结构
Jenkins 创建任务
选择 “构建自有风格的软件项目”
找到 “Source Code Management”,选择 “Subversion”,点击”Add” 按钮,添加访问 SVN 仓库 jenkins-repo 的用户名和密码
在 “Source Code Management” 中继续填写 jenkins-study 项目所在 SVN 仓库 jenkins-repo 完整的 URL 地址,选择上面添加的 SVN 仓库用户名和密码;构建类型选择 “Invoke top-level Maven targets”,而 Maven 版本则选择之前在 “全局工具配置” 中指定的 Maven 版本,构建命令填 “clean install”,最后保存设置内容。特别注意,如果这里的 URL 地址使用 SVN 协议,那 Jenkins 将会提示无效 URL 的错误信息,因此需要使用 HTTP 协议来访问 SVN 仓库,同时完整的 URL 地址必须包含 Maven 项目的名称,因为 Jenkins 默认会去找 URL 地址下的 pom.xml 文件。使用 HTTP 协议访问的前提是 Subversion 集成了 Web 服务,具体教程在这里,通过 Apache、Subversion 搭建 SVN 服务器,实现使用 HTTP/SVN 协议访问 SVN 仓库
1 | # 因为SVN服务安装在Docker容器内(基于Debian镜像),Jenkins同样也安装在Docker容器内(基于Tomcat镜像),因此下图URL中的IP是SVN服务所在Docker容器的IP。因为之前在Docker容器内安装Subversion并集成了Apache,而Apache默认端口是80,所以下图的URL地址可以不指定具体的端口。 |
手动对之前的 jenkins-study 项目执行构建操作
构建过程中,Jenkins 默认会从 SVN 仓库检出对应的项目源码到 ~/.jenkins/workspace 目录(Jenkins 所在服务器的文件目录),同时在 Jenkins 构建任务页面左边的小窗口内可以看到相关构建信息(构建进度、日志等)。第一次构建过程耗时会比较长,因为 Maven 需要从中央仓库下载很多依赖包;如果想加快构建速度,局域网内可以通过 Nexus 搭建 Maven 本地仓库,然后在 Maven 的配置文件 settings.xml 中添加本地仓库的地址。
配置构建完成后将 War 包部署到 Tomcat 应用服务器
这里的 Tomcat 应用服务器,一般指测试服务器或者生产服务器。由于 Jenkins 需要将 War 部署到 Tomcat 服务器上,因此这里的 Tomcat 服务器需要预先需要配置管理员用户。先找到”Post-build Actions” 配置项,选择”Add post-build action” –> “Deploy war/ear to a container(依赖 deploy to container 插件)”,然后填写 War 包文件的相对路径、访问 Tomcat 项目时使用的项目名称。接着选择”Add Container” –> “Tomcat 8.x”,点击 “Add” 按钮,填写 Tomcat 服务器管理员用户的用户名和密码、访问 Tomcat 服务器的 URL 地址,然后点击 “Save” 按钮保存设置。最后再次执行构建操作,构建完成后可以查看构建日志或者在浏览器输入以下地址,验证构建生成的 War 包文件是否成功部署到指定的 Tomcat 服务器上,浏览器可以访问 URL:http://127.0.0.1:8082/jenkins-study/demo/hello
配置远程触发构建
找到”Build Triggers” 配置项,勾选”Trigger builds remotely”,填写 Token 的值(任意字符串),最后点击”Save” 按钮保存设置。通过浏览器或者 CURL 工具访问链接 http://127.0.0.1:8888/jenkins/job/jenkins-study/build?token=yOEBc7Dcd4duKSNt ,测试远程触发构建是否配置成功;其中 http://127.0.0.1:8888/jenkines 是访问 Jenkins 服务器的 URL 地址。构建成功后,在 Jenkins 构建任务页面左边的小窗口(构建历史)内可以看到新创建的构建历史。
获取用户的 crumb 值,使用 CURL 命令触发远程构建时需要用到
一般来说,当在 Jenkins 内启用了” 防止跨站点请求伪造”,且通过 CURL 命令触发远程构建时才需要带上 crumb 值。下面先介绍如何获取某用户的 API Token,因为后续将用到 API Token 的值。
1 | # 浏览器输入以下地址获取某用户的crumb值,其中clay是用户名,115613e7bde4a846d49800f9e004cda2e4是上面获取得到的API Token |
通过 CURL 命令触发远程构建
1 | # 首先按照上面的操作,配置远程触发构建,并获取某用户的crumb值 |
配置 SVN 钩子程序
1 | # 连接Docker容器(SVN) |
验证 SVN 钩子程序是否生效
Eclipse 内修改 Maven 项目 jenkins-study 的代码,然后将代码提交到 SVN 仓库,观察 Jenkins 构建任务页面左边的小窗口(构建历史)内是否有新构建历史出现,如果有则说明 SVN 钩子程序生效了。
Jenkins 常规构建流程总结