1、安装SVN服务器,安装方法网上很多资料可参考。
在opt目录下创建svn库 /opt/svnrepo/
在该目录下执行以下命令,创建一个版本库svn
svnadmin create svn
创建完成后,/opt/svnrepo/目录下会生成svn目录,进入svn目录,会看到里面包含如下目录
conf:配置文件目录
db:上传的文件库
hooks:保存钩子命令脚本文件
locks:锁文件
进入conf目录,修改svnserve.conf文件内容如下
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = My Svn ##这里随意
修改passwd创建一组用户名和密码,格式如下
harry = harryssecret
修改authz文件,给上面创建的用户授权
harry=wr ##wr表示读写
通过以下命令启动svn服务
svnserve -d -r /opt/svnrepo/
2、安装Maven,Jenkins需要通过Maven对Maven项目打包
3、安装Tomcat,Jenkins和项目都需要运行到tomcat容器中,当然也可以分开部署到不同的容器中,
安装好tomcat之后,在conf目录下的tomcat-users.xml文件中创建用户和角色,如下所示
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat_user" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
4、安装Jenkins
下载好jenkins.war,将其放到tomcat的webapps目录即可,启动tomcat即可访问到jenkins,第一次访问时需要去查看admin账号的密码,其实在tomcat时日志中也有打印出来,该密码在 /root/.jenkins/secrets/initialAdminPassword 文件中,在jenkins页面中输入该密码后就可以登录成功,之后选择安装推荐的插件就行。
1)、在系统管理-全局安全配置中设置如下

2)、在系统管理-全局工具配置中,配置jenkins所需的maven的settings.xml、JDK、Maven相关信息,如下图所示


3)、在插件管理中找到 Deploy to container 进行安装

4)、将创建的web项目上传到上面搭建好的svn库中
5)、在jenkins中新建一个项目,去设置相关属性,比如源码库,构建等,在这里我遇到一个很奇葩的问题,在设置源码库为svn库,然后需要保存svn库的用户名和密码的操作上出现了问题,我发现这一步骤调用的接口不是我设置的jenkins服务的域名,而是调用了127.0.0.1,真的有点搞笑,难道jenkins的页面把这里写死了?

怎么解决这个问题呢,我只能在本地起了一个nginx,将这个请求转发到了xxx.cn/jenkins上去,又因为我的xxx.cn域名配置了https,这里转发的时候转发到http的,服务器上又设置了一个http自动跳转到https,但这里又出现了把Post请求转成Get请求导致报405错误的问题;
本地nginx配置:
location /jenkins {
proxy_set_header Host xxx.cn;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://xxx.cn/jenkins;
}
服务器上http转https的配置:
server {
listen 80;
server_name xxx.cn;
##下面这句解决post请求被转成get请求的问题
return 307 https://$host$request_uri;
}
设置构建

配置好源码库和构建之后就可以对项目进行构建了

构建成功之后可以在工作区看到target目录和打包完成的war包
目前jenkins已经可以拿到svn库的源码通过maven进行打包操作了,接下来就是怎么将打包好的war部署到容器中,在项目中设置构建后的操作,如下图

设置好之后,再次进行构建,查看日志会发现jenkins会把war部署到指定容器,也可以去查看tomcat下的webapps目录,就能清楚的看到,最合理的办法那当然是去访问部署的项目,不出意外应该是可以正常访问的。至此,其实基本的功能都已经实现了,但感觉还是不够。
6)、提交代码触发svn的钩子程序去通知jenkins执行项目构建
如何通知jenkins去构建呢,jenkins提供了构建触发器,如下图进行配置

如上图,那最后完整的通知URL如下,只要在浏览器中运行该url,jenkins就会启动项目构建操作
https://xxx.cn/jenkins/user/admin/my-views/view/all/job/jenkins-one/build?token=jenkins-one-abc123
还记得上面安装svn部分,介绍svn版本库中的目录吗?其中有一个hooks目录,其中就是一些钩子程序,我们只需要将上面的url通过linux命令执行一遍即可通知到jenkins了,那用什么命令呢,没错就是curl,将下面的命令写到hooks目录中的post-commit.tmpl文件中,最后一定要记得将该文件重命名去掉.tmpl后缀,并且这里也不要.sh。
curl -X post -v -u admin:password -H "Jenkins-Crumb:583e0c4c4514ac5564d65c9412b279fcecc83d0f8dd996f6c9ed589ff9282b8c" https://xxx.cn/jenkins/user/admin/my-views/view/all/job/jenkins-one/build?token=jenkins-one-abc123
上面的命令中-H后是一个头部head,这里的Jenkins-Crumb是防止跨站点请求伪造,当然也可以不加这个头部信息,那它是如何获取的呢,在admin用户的设置下进行如下操作,获取API Token

拿到生成的API Token,在浏览器中执行如下请求
http://admin:117856df6995090abe32cbb25cc12e8c08@xxx.cn/jenkins/crumbIssuer/api/xml
该请求会返回一段xml,如下图所示,其中crumb标签的值就是上面的Jenkins-Crumb头

最后将上面的curl命令写入到hooks目录下的post-commit文件即可,可以将文件中原有的内容全部注释掉即可,这时,咱们在改完代码提交到svn之后就会自动触发jenkins进行构建操作。
7)、处理jenkins构建时出现从svn库中拉取不到最新版本源码的问题
我们反复修改几次代码,提交svn,触发jenkins构建,然后访问项目,会发现jenkins构建时拉取的不是最新代码,而是上一个版本的代码,通过如下方式进行处理即可

本文详细介绍了使用Jenkins实现自动化构建和部署的过程,包括搭建SVN服务器、Maven、Tomcat、Jenkins环境,以及配置Jenkins进行源码管理、构建、部署、触发构建和处理构建异常等关键步骤。

3122

被折叠的 条评论
为什么被折叠?



