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

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文件中创建用户和角色,如下所示





4、安装Jenkins

下载好jenkins.war,将其放到tomcat的webapps目录即可,启动tomcat即可访问到jenkins,第一次访问时需要去查看admin账号的密码,其实在tomcat时日志中也有打印出来,该密码在 /root/.jenkins/secrets/initialAdminPassword 文件中,在jenkins页面中输入该密码后就可以登录成功,之后选择安装推荐的插件就行。

1)、在系统管理-全局安全配置中设置如下

 Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第1张图片

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

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第2张图片

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第3张图片

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

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第4张图片

4)、将创建的web项目上传到上面搭建好的svn库中

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

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第5张图片

怎么解决这个问题呢,我只能在本地起了一个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;
     } 

设置构建

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第6张图片

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

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第7张图片

构建成功之后可以在工作区看到target目录和打包完成的war包Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第8张图片

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

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第9张图片

设置好之后,再次进行构建,查看日志会发现jenkins会把war部署到指定容器,也可以去查看tomcat下的webapps目录,就能清楚的看到,最合理的办法那当然是去访问部署的项目,不出意外应该是可以正常访问的。至此,其实基本的功能都已经实现了,但感觉还是不够。

6)、提交代码触发svn的钩子程序去通知jenkins执行项目构建

   如何通知jenkins去构建呢,jenkins提供了构建触发器,如下图进行配置

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第10张图片

如上图,那最后完整的通知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

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第11张图片

拿到生成的API Token,在浏览器中执行如下请求

http://admin:[email protected]/jenkins/crumbIssuer/api/xml

该请求会返回一段xml,如下图所示,其中crumb标签的值就是上面的Jenkins-Crumb头

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第12张图片

最后将上面的curl命令写入到hooks目录下的post-commit文件即可,可以将文件中原有的内容全部注释掉即可,这时,咱们在改完代码提交到svn之后就会自动触发jenkins进行构建操作。

7)、处理jenkins构建时出现从svn库中拉取不到最新版本源码的问题

我们反复修改几次代码,提交svn,触发jenkins构建,然后访问项目,会发现jenkins构建时拉取的不是最新代码,而是上一个版本的代码,通过如下方式进行处理即可

Linux上搭建Jenkins通过拉取SVN库上的代码进行自动部署_第13张图片

 

你可能感兴趣的:(jenkins)