1. 为什么需要jenkins自动化集成开发环境。
故事背景:
前后端分离开发过程中, 前后端联调通讯时,需要后端人员开发完成后, 将代码打包部署到测试服务器上。 此过程会导致后端人员因代码更新速度过慢而影响整体效率,此行为不符合程序员四大基本优点。
jenkins自动化集成开发方案存在已久, 它使后端人员只需要提交svn代码,并不需要关注打包、部署等一系列问题,前端人员即可获得最新的测试环境, 从而提高了开发效率。
2. 怎么部署jenkins。
2.1. 一台服务器(windows/linux系统), 安装有JDK/Maven/Tomcat
2.2. 从jenkins官网下载最新的war包,copy到tomcat的webapps下, 启动tomcat 。
apache-tomcat-xxx/bin/startup.bat
云盘下载地址:
链接:https://pan.baidu.com/s/1nyrIOfHjCdBMELFcdL7k4g
提取码:hvog
2.3. 用浏览器访问http://localhost/8080/jenkins/ , 按照步骤一步步安装jenkins。
默认密码路径 /root/.jenkins/secrets/initialAdminPassword
2.4 登录jenkins后, 点击 Manage Jenkins . 配置相关的信息。
security配置:
配置 Global Tool Configuration:
manager plugins(安装插件):
Subversion Plug-in / Deploy to container Plugin
此时基础配置已完成。
2.5 新建item=> 填写项目名称,选择 freestyle project ,确定后跳转下图界面:
源码管理: 选择subversion, 填写svn的源码下载地址及svn的账号密码, 其他默认。
构建触发器: 选择远程构建。 填写token的值(此时一定是一个token的字符串,而不是一个地址)
具体的访问地址是: http://ip:port/jenkins/job/项目/build?token=xxx
构建环境: 选择maven版本, 使用 clean install 构建项目
构建后的操作:
tomcat需要可以通过浏览器访问 ManagerApp 。
tomcat 9 只允许本机访问, 此时可以通过 {tomcat webapps路径} /manager/META-INF/context.xml 中修改
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
设置tomcat的conf/tomcat-users.xml
<role rolename="tomcat" />
<role rolename="manager-gui"/>
<user username="账号" password="密码" roles="tomcat,manager-gui"/>
此时, 如果遇到通过浏览器上传war包失败的情况, 应该是tomcat 9 跨域的问题, 只需要注销掉{tomcat webapps路径}/manger/WEB-INF/web.xml
<!--
<security-constraint>
<web-resource-collection>
<web-resource-name>HTML Manager interface (for humans)</web-resource-name>
<url-pattern>/html/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-gui</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Text Manager interface (for scripts)</web-resource-name>
<url-pattern>/text/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-script</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>JMX Proxy interface</web-resource-name>
<url-pattern>/jmxproxy/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-jmx</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Status interface</web-resource-name>
<url-pattern>/status/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-gui</role-name>
<role-name>manager-script</role-name>
<role-name>manager-jmx</role-name>
<role-name>manager-status</role-name>
</auth-constraint>
</security-constraint>
-->
注销掉以上代码即可, 但会导致不安全。 请自行考虑其他解决方案。
以上配置完成后,点击 Build Now ,jenkins就会从svn服务上拉去最新的代码, 并打包运行、发布到tomcat上。
3. 如何编写svn钩子函数。(window环境下)
此时我们有了一个通过外部的访问地址触发jenkins自动打包的路径。 参考2.5的配置。
如何实现windows服务器上的提交后自动触发jenkins打包部署呢??
下面我们需要一个钩子函数。
3.1 打开 服务器端的svn的 Repositories / 代码库/ hooks文件夹。
此文件夹下有一系列的文件。 我们copy post-commit.tmpl 这个文件, 重命名为 post-commit.bat 文件。
注释掉*.bat里面的原有代码, 此时服务器的windows系统需要一个工具包, 叫 curl。
链接:https://pan.baidu.com/s/1VB1Bjmd_w9zTBWNrwQV_9w
提取码:tqyw
修改.bat 文件内容为:
{Curl解压存放位置}\bin\curl.exe -X post -v -u {jenkins账号}:{jenkins密码} http://{服务器IP地址}:{端口号}/jenkins/job/{jenkins的项目名}/build?token={自定义的token值}
以上{}及包含的内容,自行替换。
此时我们的钩子函数已编辑完成。 可以测试是否成功了!