如何使用詹金斯管道将战争部署到tomcat?
Posted
技术标签:
【中文标题】如何使用詹金斯管道将战争部署到tomcat?【英文标题】:How to deploy war to tomcat using jenkins pipeline? 【发布时间】:2019-06-14 18:18:44 【问题描述】:我想使用管道部署战争文件。 什么是正确的做法。有没有办法在管道代码中使用部署到容器。 使用 jenkins manager 调用 catalina.sh 或使用 curl 命令进行部署的问题是我找不到任何检测成功部署的方法。
有没有标准的方法来做到这一点
【问题讨论】:
您在 jenkins 中使用的是脚本化管道还是声明性管道?这也是您的主要问题:如何在 tomcat 中检测成功部署? 太宽泛了,你必须分享一些代码或至少一些更多细节。 @JRichardsz 使用 groovy 语法 我的回答对你有帮助吗? 【参考方案1】:我认为最好的方法应该是部署插件https://www.jdev.it/deploying-your-war-file-from-jenkins-to-tomcat
【讨论】:
可以在管道groovy脚本中使用吗?【参考方案2】:在tomcat中,用jenkins和tomcat配置:
在您的服务器上安装并下载 jenkins 并启动服务器,然后使用“New Item”创建项目并选择 pom.xml 并创建 maven 项目。 现在转到您的项目并单击配置并选择“限制此项目可以运行的位置”并在您的关卡表达式中添加母版。 在 git 上选择“源代码管理”,然后配置您的 git 存储库和凭据以及分支名称。 选择“构建”添加根 pom:pom.xml 和目标和选项:干净安装 -DskipTests 选择“Post-build Actions”并选择“Deploy war/ear to a container” WAR/EAR 文件:target/test.war 上下文路径:测试 容器选择 tomcat 并添加凭据 Tomcat URL:示例:http://localhost:8080/更新 'apache-tomcat-8.5.5\webapps\manager\META-INF\context.xlm 文件。取消注释值标签。并重启服务器
context.xml 文件
Before :
<Context antiResourceLocking="false" privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.0\.9|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
After change :
<Context antiResourceLocking="false" privileged="true" >
</Context>
for auto deployment: go to 'apache-tomcat-8.5.5\conf\context.xml' and add antiResourceLocking="true" in 'Context' tag
【讨论】:
【参考方案3】:在tomcat中,部署war有两种选择:
将战争复制到 webapps 文件夹 将战争上传到 /manager/text/deploy 由您的 tomcat 发布的 http 端点这里有一些部署战争和获取部署状态的方法(成功|失败)
您可以将以下 sn-ps 之一放在管道的部署阶段或迁移到 groovy。
/manager/text/deploy
这是一个端点,它允许我们将战争从远程主机上传到 tomcat 服务器并作为响应:
http status 200 表示成功或失败不分先后 Http Body 喜欢:OK - Deployed application at context path /foo
FAIL - Deployed application
at context path /my_app
but context failed to start
所以,为了检测是否一切正常,我执行了这个验证:
CURL_RESPONSE=$(curl -v -u $TOMCAT_USER:$TOMCAT_PASSWORD -T $WAR_PATH "http://$TOMCAT_HOST:$TOMCAT_PORT/manager/text/deploy?path=/$CONTEX_NAME&update=true")
if [[ $CURL_RESPONSE == *"FAIL"* ]]; then
echo "war deployment failed"
exit 1
else
echo "war deployed successfully "
exit 0
fi
您可以在此处找到启用此端点所需的配置:
https://***.com/a/37622865/3957754将war文件复制到webapps
将war文件复制到webapps后,您可以列出已部署的应用,并在http body响应中找到您的应用名称:
OK - Listed applications for virtual host localhost
/manager:running:0:manager
/:running:0:ROOT
/docs:running:0:docs
/examples:running:0:examples
/host-manager:running:0:host-manager
/my_app:running:0:my_app
/my_other_app:running:0:my_other_app
您可以使用带中断的循环作为最大尝试次数。
您可以在此处找到启用此端点所需的配置:
https://***.com/a/40722537/3957754/health 或 /status
这样更干净,据我所知,有几个监控平台使用这种策略。
所有内容都包括在您的应用程序中公开一个额外的 http 端点(Web 应用程序、api rest、守护程序等)
此端点必须返回以下响应之一:
http 状态
(200) : 表明你的应用程序一切正常 (!200):表明你的应用有问题。如果您的应用未正确部署,此端点将返回 404。xml 或 json
"status":"200",
"database_connectivity":"200",
"read_write_disk":"200",
"etc":"etc"
最后,您可以使用循环从您的 Jenkins 管道中使用此 /health 端点。此策略将允许您从外部平台监控您的应用,例如:
https://www.site24x7.com/ Pingdom 新遗物 等【讨论】:
以上是关于如何使用詹金斯管道将战争部署到tomcat?的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins管道将Node + Gulp项目中产生的战争发布给Artifactory