Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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构建时拉取的不是最新代码,而是上一个版本的代码,通过如下方式进行处理即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值