当前位置: 代码网 > it编程>编程语言>其他编程 > 实现自动化构建与集成:Jenkins与SVN整合的指南

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

2024年07月31日 其他编程 我要评论
enkins是一个流行的开源自动化服务器,可以用于构建、测试和部署软件项目。而SVN则是一个版本控制系统,可以帮助开发人员管理和协调代码。将Jenkins和SVN整合起来,可以实现自动化构建和集成,减少手动操作的错误和时间浪费。此外,整合后还可以轻松管理和跟踪代码变更,方便团队协作和版本控制。此篇文章将详细介绍如何在Jenkins中配置SVN插件,以及如何使用Jenkins集成SVN进行自动化构建和测试


在这里插入图片描述

前言(非必须):配置jenkins的csrf

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

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

img

1、新建任务

img

img

2、 配置svn

img

img

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

img

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

img

查看是否打包成功

img

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

img

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

img

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

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

img

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

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

该如何设置不通过项目名就能访问到项目呢?可以将jenkins项目的配置-context-path设置为root

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

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

img

4.3、第三种:通过ssh+shell脚本

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

安装ssh上传插件:publish over sshversion,配置ssh步骤如下:系统管理-系统配置-publish over ssh

img

将之前部署tomcat的步骤(deploy war/ear to a container)删除,添加send build artifacts over ssh

img

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

需要修改两个地方:

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

img

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

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

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

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

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

img

img

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

img

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

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

img

#!/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

然后执行构建即可!

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、[构建触发器]

地址访问规则是:jenkins_url/job/apple/build?token=token_name

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

img

img

7、[svn钩子程序]

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

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

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

hudson.security.csrf.globalcrumbissuerconfiguration.disable_csrf_protection=true

img

运行脚本

img

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

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

img

在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

img

给文件权限: chmod 755 post-commit

img

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

img

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

img

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

我们多个项目的时候,上传某一个项目代码到svn,怎样实现只更新部署提交的项目,而对其他的项目没有影响,这就要用到脚本文件
很简单,只需要修改一下两处即可,多个项目配置多个:
img

#!/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
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com