实现自动化构建与集成:Jenkins与SVN整合的指南

这篇具有很好参考价值的文章主要介绍了实现自动化构建与集成:Jenkins与SVN整合的指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

前言(非必须):配置Jenkins的CSRF

在使用Jenkins的时候总是保存很慢,前端报错,错误关键词:Found invalid crumb 。和CSRF验证有关联,有说使用Strict Crumb Issue插件来解决。

第一步:Strict Crumb Issuer插件安装

进入Jenkins插件管理,Available选项,搜索Strict Crumb插件安装Strict Crumb Issuer插件,然后进入jenkins->系统设置->全局安全设置->跨站请求伪造保护,把下拉选项改成Strict Crumb Issue,点开右下高级设置,去除掉Check the session ID选项选中,当然我这样设置了貌似没有生效。

第二步:配置Jenkins-Authentication

系统设置–>全局安全配置–>Authentication

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

1、新建任务

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

2、 配置SVN

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

直接保存,然后点击左侧的:立即构建按钮,看是否能把源码下下来

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

3、配置Maven:进行编译打包

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

查看是否打包成功

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

4.1、发布到WEB容器(第一种:将项目放在webapps下)

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

保存后,然后执行立即构建,就可以看到war包已经成功到我们的WEB服务器上面了

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

访问地址即可看到我们代码中的内容

http://182.92.209.212:8080/apple/index.jsp

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

4.2、发布到WEB容器(第二种:将项目名称修改为ROOT)

在第一种部署Tomcat的方式上,在webapps下的项目必须要加上项目名称。

该如何设置不通过项目名就能访问到项目呢?可以将Jenkins项目的配置-Context-Path设置为ROOT

因为Tomcat默认就是将应用放在了$CATALINA_HOME/ROOT下,可以将Tomcat自带的ROOT目录删除。

这样我们再通过Jenkins进行打包发布访问的时候就不需要加上项目名称了。

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

4.3、第三种:通过SSH+Shell脚本

在4.2的时候对4.1的部署方式进行了一些优化,但是感觉还是不太够,因为部署在webapps下的方式不能够重启tomcat、如果遇到修改项目配置文件等的操作

需要重启tomcat,那么就显得有些不足了。

本方式采用SSH+Shell脚本进行部署项目,并重启Tomcat,SSH(为了将Maven的war包上传到服务器),Shell(执行脚本关闭/启动Tomcat)

1、Jenkins配置SSH

安装SSH上传插件:Publish Over SSHVersion,配置SSH步骤如下:系统管理-系统配置-Publish over SSH

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

2、配置项目:添加构建后操作

将之前部署Tomcat的步骤(Deploy war/ear to a container)删除,添加Send build artifacts over SSH

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

shell脚本如下,创建文件后还需要给文件添加执行权限:chmod 777 tomcat-restart.sh

#!/bin/bash

export JAVA_HOME=/usr/local/java/jdk1.8.0_144

# jdk-jar位置(解压war包)
jar_home=/usr/local/java/jdk1.8.0_144/bin/jar
# tomcat的位置(关闭/启动tomcat)
tomcat_home=/usr/local/tomcat8/apache-tomcat-8.5.51
# WEb应用放置的位置(自定义应用存放位置,与Remote Directory一致)
application_path=/opt/application

#【1】 停止tomcat变量
SHUTDOWN=$tomcat_home/bin/shutdown.sh
#【2】 启动tomcat变量
STARTTOMCAT=$tomcat_home/bin/startup.sh
#【3】解压war包
cd $application_path;$jar_home -xvf $application_path/*.war;

echo " ==================start【`date +"%Y-%m-%d %H:%M:%S"`】==================" >> ./tomcat-restart.log
#【4】关闭进程
PID=`ps -ef |grep $tomcat_home/conf |grep -v grep | awk '{print $2}'`
if [ ! "$PID" ];then # 这里判断TOMCAT进程是否存在
    echo "进程不存在" >> ./tomcat-restart.log
else
    echo "进程存在,关闭Tomcat" >> ./tomcat-restart.log
    kill -9 $PID
fi
#【5】启动项目
$STARTTOMCAT  
echo "启动项目" >> ./tomcat-restart.log
echo " ==================end【`date +"%Y-%m-%d %H:%M:%S"`】====================" >> ./tomcat-restart.log

3、修改tomcat配置文件

需要修改两个地方:

  • 1、去除Host标签的appBase="webapps"属性,同时可以删除webapps目录,不会对应用造成影响因为不是通过tomcat的用户进行登录传输war包了
  • 2、添加标签

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

然后进行Jenkins构建即可,SSH会将构建完成的war包放到你指定的目录下,然后执行你的脚本文件

5、Maven多模块项目打包发布

1、项目打war包

项目打war包需要添加maven插件,参考:https://www.cnblogs.com/zhangzhixi/p/17010235.html

确保war包放在本地tomcat的webapps下能够正常访问项目

2、配置项目SVN地址

上面有进行配置的操作,这里就不再赘述

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

3、maven打包

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

这样就会在项目的target下生成war包了

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

4、通过SSH,将war包传输到web发布服务器

第一步:配置web发布服务器地址,参考上面的:https://www.cnblogs.com/zhangzhixi/p/17015148.html#_label2_6

第二步:配置项目中的参数:

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

5、编写shell脚本:手动更改变量的值

#!/bin/bash
export JAVA_HOME=/mixky/software/jdk/jdk1.7.0_80
# jar命令的位置(解压war包)
jar_cmd="/mixky/software/jdk/jdk1.7.0_80/bin/jar"
# tomcat的位置(关闭/启动tomcat)
tomcat_home=/mixky/software/tomcat/tomcat-rfwm
tomcat_log=${tomcat_home}/logs/catalina.out
# 项目目录的位置
project_dir="/mixky/project/rfwm-cicd-dev"

#【1、解压war包】
cd "$project_dir"
echo " ==================start【$(date +"%Y-%m-%d %H:%M:%S")】==================" >>./tomcat-restart.log
# 在项目目录及其子目录中查找所有以 .war 为后缀的文件。
find "$project_dir" -name "*.war" | while read war_file; do
  dir_name="$(basename "${war_file%.*}")"
  if [ -d "$dir_name" ]; then
    # 清空目录里的内容
    rm -rf "$dir_name"/*
  else
    mkdir "$dir_name"
  fi
  cd "$dir_name"
  # 解压
  "$jar_cmd" -xf "$war_file"
  cd ..
done

#【2、关闭tomcat进程】
PID=$(ps -ef | grep $tomcat_home/conf | grep -v grep | awk '{print $2}')
if [ ! "$PID" ]; then # 这里判断TOMCAT进程是否存在
  echo "进程不存在" >>./tomcat-restart.log
else
  echo "进程存在,关闭Tomcat" >>./tomcat-restart.log
  kill -9 $PID
fi

#【3】启动项目
${tomcat_home}/bin/startup.sh >${tomcat_log} 2>&1 &
echo "启动项目" >>./tomcat-restart.log
echo " ==================end【$(date +"%Y-%m-%d %H:%M:%S")】====================" >>./tomcat-restart.log

然后执行构建即可!

end:通过Maven整合SonarQube

clean
install
-Dmaven.test.skip=true
sonar:sonar
-Dsonar.host.url=http://202.85.222.14:9000
-Dsonar.login=d49cd67c5a4d2375a1cc405ef69febc07b4d5928
-Dsonar.projectKey=${JOB_NAME}
-Dsonar.projectName=${JOB_NAME}
-Dsonar.ws.timeout=300000

6、[构建触发器]

远程触发的基本原理是 SVN 服务器给 Jenkins 项目特定的 URL 地址发送请求,但必须以请求参数的形式携带一个特定值,这个特定值就是这里的“身份验证令牌”。

地址访问规则是:JENKINS_URL/job/apple/build?token=TOKEN_NAME

比如我们这个项目的地址触发地址是:http://110.43.204.225/jenkins/job/apple/build?token=APPLE

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

7、[SVN钩子程序]

表示在提交代码后,SVN会去做什么事情,这里演示的功能是:

Begin:禁用 Jenkins 中的 CSRF

必须要禁用这个,不然无法通过curl命令发送触发器会出现403

具体配置路径是:系统管理–>命令行脚本–>写入–>运行脚本

hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

运行脚本

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

Linux下通过curl 命令用来发送 HTTP 请求

这样我们就可以在SVN服务器上面通过执行curl命令,来达到第五步的通过浏览器访问然后执行构建的功能了。

admin:123456,是Jenkins登录时的用户名和密码

curl -X post -v -u admin:123456 http: //110.43.204.225/jenkins/job/apple/build?token=APPLE

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

编辑SVN钩子程序

在SVN配置文件下有这样一个文件:/usr/local/svn/svnrepos/project/hooks/post-commit.tmpl,表示在执行commit之后,SVN会做什么事情。

我们复制一份这个文件,并修改为:post-commit,这样才能够被SVN识别到。

cd /usr/local/svn/svnrepos/project/hooks/
cp post-commit.tmpl post-commit

编辑这个文件: vim post-commit

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

给文件权限: chmod 755 post-commit

测试钩子程序

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

提交后发现确实是Jenkins自动执行了构建

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

访问项目,查看部署成功:

实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划

8、[SVN钩子程序之多项目Jenkins触发脚本]

在Jenkins上面不止是管理一个项目,在SVN上面也不只是管理一个项目

我们多个项目的时候,上传某一个项目代码到SVN,怎样实现只更新部署提交的项目,而对其他的项目没有影响,这就要用到脚本文件
很简单,只需要修改一下两处即可,多个项目配置多个:
实现自动化构建与集成:Jenkins与SVN整合的指南,jenkins,svn,servlet,原力计划文章来源地址https://www.toymoban.com/news/detail-742394.html

#!/bin/sh

export LANG=en_US.UTF-8
# 仓库的路径
REPOS="$1"
# 新提交的版本号
REV="$2"
# 钩子脚本的日志
LOGFILE=/var/log/svn.log
# 脚本的标准输出和标准错误输出都打印到日志文件里
exec 1>>"$LOGFILE"
exec 2>&1

SVNLOOK=/usr/bin/svnlook

TIME=$(date "+%Y-%m-%d %H:%M:%S")
# 提交作者
AUTHOR=$($SVNLOOK author -r "$REV" "$REPOS")
# 修改的目录集合
CHANGEDDIRS=$($SVNLOOK dirs-changed "$REPOS")
# 提交时的备注信息,不建议用中文
MESSAGE=$($SVNLOOK log -r "$REV" "$REPOS")

# CHANGEDDIRS里的主目录
MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)
PROJECT=$(echo "$MASTERDIR" | awk -F/ '{print $1}')

# 根据项目名称决定使用哪个 token
if [ "$PROJECT" == "中铁现场焊接管理系统" ]
then
    curl -X POST -v -u admin:123456 http://xxx/jenkins/job/rfwm-cicd-dev/build?token=rfwm-cicd-dev
elif [  "$PROJECT" ==  "demo" ]
then
    curl -X post -v -u admin:123456 http://xxx/jenkins/job/demo/build ?token=DEMO
else
    echo "Input Is Error."
    echo "项目名称:$PROJECT"
fi

到了这里,关于实现自动化构建与集成:Jenkins与SVN整合的指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT+jenkins window环境实现一键自动化构建打包签名发布

            1.官网下载地址: Jenkins download and deployment,下载最新版本的安装包并安装。安装过程中,会要求你输入端口号并记住。         2.java下载地址:Java Downloads | Oracle,下载最新版本的安装包并安装。         3.浏览器输入网址:127.0.0.1: port, port为端口号,默认8080,安

    2024年02月01日
    浏览(44)
  • jenkins实现接口自动化持续集成(python+pytest+ Allure+git)

    在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作。借助Jenkins,我们可以结合 Git/SVN 自动拉取代码,通过设置定时构建实现自动触发脚本执行,得到测试报告,最后还可以配置发送邮件等。今天我们

    2024年02月03日
    浏览(55)
  • Jenkins从配置到实战(一) - 实现C/C++项目自动化构建

    本文章主要介绍了,如何去安装和部署Jenkins,并实现自动拉取项目代码,自动化编译流程。 官网 中文网站 可以下载这个 安装jenkins前先安装java yum search java|grep jdk yum install java-1.8.0-openjdk 安装jenkins java -jar jenkins.war 安装后去浏览器访问对应的8080端口,出现以下页面 稍微等几

    2024年02月15日
    浏览(47)
  • Python、Pytest、Allure、Selenium和Jenkins实现自动化测试集成实例

    下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdfv1.1 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 本文将介绍如何使用Python、Pytest、Allure、Selenium和Jenkins实现测试自动

    2024年02月09日
    浏览(52)
  • 【软件测试】- 将 Selenium 和 JMeter 测试脚本集成到 Jenkins 中实现自动化测试和持续集成(CI)及Jenkinsfile 实现 Jenkins Pipeline 原理介绍

    将 Selenium 和 JMeter 测试脚本集成到 Jenkins 中是实现自动化测试和持续集成(CI)的关键步骤。以下是详细的集成过程: 1、准备工作 安装 Jenkins : 确保您已经在服务器上安装了 Jenkins。 可以从 Jenkins 官网 下载并安装。 安装必要的插件 : 在 Jenkins 中安装所需的插件,如 Git 插

    2024年02月04日
    浏览(66)
  • Jenkins自动化构建

    Jenkins 是一款开源 CICD 软件,用于自动化各种任务,包括构建、测试和部署软件 Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序 安装方法 因为 Jenkins 本身是没有在 dnf 的软件仓库包中的,所以我们需要连接 Jenkins 仓库: wget 是 Linux 中下载文件的

    2024年02月15日
    浏览(41)
  • Gitlab自动触发jenkins完成自动化构建 jenkins

     首先安装gitlab插件,我已经安装过了,首次请在 可选插件 中进行搜索。   进入项目配置--构建触发器: Build when a change is pushed to GitLab. GitLab webhook URL: 请复制此处的URL,后续有用。  然后点击高级   “Allowed branches”触发分支可以用默认的全部分支,也可以选择仅由指定名

    2024年02月16日
    浏览(59)
  • Jenkins部署与自动化构建

    docker 安装 Jenkins 拉取稳定版Jenkins镜像 注意: docker拉取镜像的时候要拉取 jenkins/jenkins 而不是jenkins 要装稳定版,否则后面会有很多插件装不上 挂载对应的容器卷 修改插件下载镜像源为清华镜像(可以先直接尝试一下是否可以安装成功) 访问web页面 http://IP:8090/ 去查看第一次

    2023年04月08日
    浏览(40)
  • Jenkins结合gitlab自动化持续集成

    大家好,我是自动化测试老司机~ 最近在公司有负责搭建自动化测试环境,自动化脚本写好后,毋庸置疑是需要将自动化脚本进行持续集成测试,能够根据企业的定制化需求,通过Jenkins触发执行构建任务,定时执行自动化脚本等,今天就给大家介绍一下Jenkins结合gitlab进行自动

    2024年02月11日
    浏览(56)
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus) 通过前面三篇文章的介绍,我们已经对.net core多方案部署到linux下有了非常全面的认识

    2024年02月02日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包