jenkins自动划部署war包遇到的坑

1:git的安装

jenkins其他maven,jdk的配置没有难度就不细说了

1.jenkins全局工具git配置

git安装的时候为了图方便直接使用yum安装的git,然后找不到git的bin文件夹,在jenkins全局工具配置git是出现各种问题,
在linux上使用"which git"命令获取git目录,然后+"/bin/git".如下图
jenkins自动划部署war包遇到的坑

2.git在任务中的配置

git的配置,这里推荐使用秘钥的方式配置,就算上面配置了git全局工具,在任务中还是需要配置秘钥,秘钥的生成在你git安装的环境上运行

ssh-****** -t rsa -C "XXXXXXX"

然后全部默认,不设置密码什么的,3次回车,就会默认生成到"/root/.ssh"下,2个文件一个秘钥一个公钥,都会用到,公钥上传你的gitlab,而秘钥就配置到你jenkins的凭证里面,如下图:
jenkins自动划部署war包遇到的坑
jenkins自动划部署war包遇到的坑

2:远程部署项目到tomcat

这里自己较菜就用tomcat的远程部署了

1:安装jenkins插件

先在jenkins中安装插件一个是maven项目插件,另一个就是"Deploy to container Plugin"插件了,maven插件不用说都知道就是为了maven项目更容易的配置构建了,而"Deploy to container Plugin"插件就是远程部署到tomcat了

2:配置tomcat的manager

划重点-tomcat的webapps下的解压自带的文件夹不能删除,因为远程部署的程序就在这几个文件夹中(虽然平时我们就是为了看一下tomcat启动是否正常,但是远程部署必要的控件在里面)

编辑远程tomcat服务器下的conf/tomcat-users.xml,在末尾增加(其实只要拉到文件末尾,去掉注释改一下就可以了)

<role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager-gui" />
  <role rolename="manager-script" />
  <role rolename="manager-status" />
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="deploy" password="tomcat" roles="manager-gui,manager-script,manager-status" />

说明一下角色的作用
manager-script -最重要的也是最主要的角色,远程部署必须的权限,不然会报403什么的权限不足
manager-gui -tomcat管理员权限,就是登入tomcat自带manager后台的的权限

3:配置tomcat远程访问允许

这是个大坑,之前配置了配置tomcat的manager权限,但是启动的时候还是一直报403权限不足,一直以为是配的角色没有生效,一直找没有生效的原因,网上搜索也是一直坑,都没说到重点,都说必须配置"manager-script"角色,没有访问权限除了"manager-script"角色其实还需要允许远程访问就是
在tomcat服务器的conf/Catalina/localhost/目录下创建一个manager.xml文件,写入如下值:

<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
             <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

这里很谢谢百度到的某个博客https://www.cnblogs.com/xyb930826/p/5725340.html

下面送上我的jenkins任务build配置如图
jenkins自动划部署war包遇到的坑

3:jenkins奇怪错误

错误"instead of the expected “OK” message",其实这个时候项目已经远程部署成功,但是你tomcat启动错误了,这个时候去看tomcat的log日志就好了,比如我就是内存不够,内存溢出了。

Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "FAIL - Deployed application at context path [/youxuan_webapp] but context failed to start
" instead of the expected "OK" message
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:715)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deployImpl(TomcatManager.java:761)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deploy(TomcatManager.java:312)
	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:101)
	... 18 more
org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "FAIL - Deployed application at context path [/youxuan_webapp] but context failed to start
" instead of the expected "OK" message
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:715)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deployImpl(TomcatManager.java:761)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deploy(TomcatManager.java:312)
	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:101)
	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:184)
	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:77)
	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:147)
	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:117)
	at hudson.FilePath.act(FilePath.java:1074)
	at hudson.FilePath.act(FilePath.java:1057)
	at hudson.plugins.deploy.CargoContainerAdapter.redeploy(CargoContainerAdapter.java:114)
	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeploy(PasswordProtectedAdapterCargo.java:93)
	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:64)
	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
	at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.post2(MavenModuleSetBuild.java:1073)
	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
	at hudson.model.Run.execute(Run.java:1841)
	at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:429)

还有其他什么jenkins的安装,jdk的安装,maven的安装都很简单不详细描述,对了maven里的settings.xml不要配置仓库路径,不然打包的时候会私库地址再加上本地仓库地址里面获取jar包(不知道为什么请大佬解释一下,或者知道怎么解决也行)