一.背景
公司的项目一直手动maven打包、上传服务器、关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的Jenkins插件一键自动部署,那更省时省力。
下面是一个简单的发布tomcat的shell脚本,执行下面脚本的前提是要在服务器中安装了git、maven
# 先关闭tomcat进程 kill -9 `ps aux|grep tomcat|grep -v 'grep'| awk 'NR==1{print $2}'` # 切换到项目存放位置 cd nxyyProjectSource/NXYY # git拉取最新代码 git pull xxxx # 切换到项目下面的代码存放位置 cd nxyy # maven打包 mvn clean mvn install -DskipTests # 将war包放到tomcat下 cd cp nxyyProjectSource/NXYY/nxyy/target/nxyy.war /home/tomcat/webapps # 开启tomcat cd /home/tomcat/bin ./startup.sh # 查看日志 tail -f ../logs/catalina.out
每次git拉取时,都需要密码,进行下面的配置后,只需要在第一次输入密码后会永久保存到服务器中,下次再git拷贝/拉取时就不需要输入密码了:
git config --global credential.helper store
如果想清除账号和密码,输入:
git config --global credential.helper reset
如果想临时存储(默认15分钟),输入:
git config --global credential.helper cache
单独对某个项目免密,在https链接里加入username:password
git remote add origin https://username:password@xxx.git
上面这些配置保存在.git/config
里。
二.Jenkins的安装/配置/热部署/脚本tomcat重启
下载安装包jenkins.war;在安装包根路径下,运行命令java -jar jenkins.war --httpPort=8080(linux环境、Windows环境都一样),运行后有一个密码,需要登录时使用:
打开浏览器进入链接http://ip:8080,进入插件安装选择,这里建议选择,推荐安装的插件,保证基本常用的功能可以使用;选择后,进入插件安装页面,有些插件安装失败,可以点击到后面的再次安装:
设置初始用户和密码,为下次登录时使用:
进入系统,安装完成:
注意,如果还是进入不了系统,需要稍等一下,或者刷新页面,如果还是进入不了,需要重新启动jenkinds服务器,在启动首页url后面加上restart就可以了【重启:http://ip:8080/restart
】;如果输入默认密码之后,一直卡住问题:
在$JENKINS_HOME/hudson.model.UpdateCenter.xml文件中,默认内容如下:
<"http://mirror.xmission.com/jenkins/updates/update-center.json">http://mirror.xmission.com/jenkins/updates/update-center.json就解决了进行系统系统配置设置Jenkins的访问路径,当然,这个路径在创建用户名之后会出现:设置插件安装源:插件管理 -> 高级,http://mirror.xmission.com/jenkins/updates/current/update-center.json
进行系统管理的全局工具配置,maven、JDK、Git的配置:
配置完后进行项目的搭建,选择新建任务:
在进行项目信息配置前,需要一些凭证Credentials信息,比如git的用户名和密码、tomcat用户的用户名和密码:系统管理 -> 凭据(Manage Credentials)
需要tomcat的用户名和密码,是为了让Jenkins可以远程发布tomcat,在tomcat的conf下tomcat-users.xml里面配置的:tomcat远程发布需要修改tomcat-users.xml、context.xml(下文构建遇到的坑第5点)、manager.xml(下文构建遇到的坑第6点
<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="admin-gui"/> <user username="用户名" password="密码" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/> </tomcat-users>进行项目信息的配置,在配置完进行构建,tomcat必须在服务器中是启动状态:
上面是tomcat热部署,下面进行tomcat的重启执行项目:先安装插件Publish Over SSH,进行信息配置:系统管理 -> 信息配置 ->Publish over SSH
构建的配置前需要创建一个重启tomcat的脚本:vi tomcat.sh,然后赋予执行权限chmod 777 tomcat.sh
#这里需要加上JAVA_HOME的配置,虽然在本地的环境变量中已经配置了,但是远程调用的时候,还是需要配上的,否则执行脚本出错。
export JAVA_HOME=/usr/java/jdk1.8.0_141-cloudera
# tomcat的位置
tomcat_home=/home/tomcat-dev
#【3.1】 停止tomcat变量
SHUTDOWN=$tomcat_home/bin/shutdown.sh
#【3.2】 启动tomcat变量
STARTTOMCAT=$tomcat_home/bin/startup.sh
#【3.3】 删除所有项目文件包括war包和war解压后的文件 如果是局部发布这句不需要 这只是正对jenkins整个war发布
rm -rf /home/tomcat-dev/webapps/TSISAPP*#得到进程ID 这里也可以简写 如果你ps -ef|grep 项目名称 可以带出PID 那么可以直接写成这样
#之前为什么写那么长 是因为在用jenkins调用脚本的时候,也会带出jenkins调用脚本的那个进程 这样kill -9 就会killjenkins进程 导致一建发布中断
#所以这里一直写到了conf文件夹目录
#如果不需要用到jenkins可以用下面简洁版 得出PID命令
#PID=`ps -ef |grep 项目名称 |grep -v grep | awk '{print $2}'`
#【3.4】 获取进程ID
PID=`ps -ef |grep /home/tomcat-dev/conf |grep -v grep | awk '{print $2}'`
if [ ! "$PID" ];then # 这里判断TOMCAT进程是否存在
echo "进程不存在"
else
echo "进程存在 杀死进程PID:$PID"
kill -9 $PID
fi#【3.5】启动项目
$STARTTOMCAT
echo "启动项目"构建:Post Steps选择Send files or execute commands over SSH,下面的构建后操作 -> Deploy war/ear to a container 就不需要了:
三.构建遇到的坑
如果没有构建一个maven项目,在插件中查找后进行安装:Maven Integration plugin
在构建后如果没有Deploy war/ear to a container,在插件中查找后进行安装:Deploy to container Plugin
出现下面的错误:
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]
解决办法:在pom.xml的<build>标签中添加<defaultGoal>install</defaultGoal>
出现下面的错误:org.codehaus.cargo.container.ContainerException: Failed to deploy 或org.codehaus.cargo.container.ContainerException: The [cargo.remote.username] and [cargo.remote.password] properties are mandatory and need to be defined in your configuration
解决办法:在pom.xml的<build>标签中的<plugins>中添加
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.4.9</version> <configuration> <container> <!-- 容器版本名称--> <containerId>Tomcat 9.x</containerId> <type>remote</type> </container> <configuration> <type>runtime</type> <properties> <!-- tomcat管理界面--> <cargo.remote.uri>http://ip:8888/manager/text</cargo.remote.uri> <!-- tomcat管理界面用户名和密码--> <cargo.remote.username>用户名</cargo.remote.username> <cargo.remote.password>密码</cargo.remote.password> </properties> </configuration> </configuration> </plugin>出现下面的问题:Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager
解决办法:到tomcat的 /webapps/manager/META_INF/context.xml文件,将文件中对访问的来源受限设置注释<Context antiResourceLocking="false" privileged="true" > <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> //注释掉即可 <Manager sessionAttributeValueClassNameFilter="java\.lang\.("/> </Context>tomcat远程连接出现403拒绝,在conf/Catalina/localhost下添加manager.xml
<"1.0" encoding="UTF-8"?> <Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> </Context>idea结合Jenkins插件进行远程发布,在Crumb Data通过http://ip:8080/crumbIssuer/api/xml"text-align: center">
通过搜索网上解决方案,大多都是说开启CSRF服务,
但还是无法解决该问题,解决办法:点击用户名 -> 设置 -> API Token -> 当前 Token,通过token名生成token,代替上面的用户名和密码,最后终于成功了
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]