如何使用詹金斯管道向Tomcat部署战争?

时间:2019-01-21 11:05:10

标签: tomcat jenkins jenkins-pipeline devops

我想使用管道部署war文件。 什么是正确的方法。有什么方法可以在管道代码中使用“部署到容器”。 调用catalina.sh或使用curl命令使用jenkins manager进行部署的问题是,我找不到任何方法来检测成功的部署。

有什么标准方法可以做到

3 个答案:

答案 0 :(得分:2)

在tomcat中,有两种部署战争的选择:

  • 将war复制到webapps文件夹
  • 将战争上传到您的tomcat发布的 / manager / text / deploy http端点

这里有一些部署战争并获得部署状态(成功|失败)的方法

您可以在管道的部署阶段放置以下片段之一,或迁移到常规应用。

/ manager / text / deploy

这是一个端点,它使我们可以将战争从远程主机上传到tomcat服务器并作为响应:

  • 成功或失败的HTTP状态200(无区别)
  • Http主体类似:

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

在这里您可以找到启用此端点所需的配置:

将战争文件复制到webapps

将war文件复制到webapp之后,您可以列出已部署的应用,并在http正文响应中找到您的应用的名称:

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

您可以使用带有中断的循环作为最大尝试。

在这里您可以找到启用此端点所需的配置:

/ health或/ status

这更干净,而且据我所知,有几个监视平台都在使用这种策略。

所有步骤都包括在您的应用程序(网络应用程序,api rest,守护程序等)中暴露一个额外的http终结点

此端点必须返回以下响应之一:

  • http stasus

    • (200):表明您的应用程序中的一切正常
    • (!200):表明您的应用有问题。如果您的应用程序部署不正确,则此端点将返回404。
  • xml或json

{
 "status":"200",
 "database_connectivity":"200",
 "read_write_disk":"200",
 "etc":"etc"
}

最后,您可以使用循环从Jenkins管道使用此/ health端点。通过该策略,您可以从以下外部平台监视应用程序:

答案 1 :(得分:0)

在tomcat中,使用jenkins和tomcat进行配置:

  • 在服务器上安装并下载jenkins,然后启动服务器进入jenkins门户,然后使用“ New Item”创建项目,然后选择pom.xml并创建maven项目。
  • 现在转到您的项目,然后单击“配置”,然后选择“限制此项目的运行位置”,然后在“ Level Expression”中添加母版。
  • 在git上选择“源代码管理” clisck,并配置git信息库以及凭据和分支名称。
  • 选择“构建”添加Root pom:pom.xml以及目标和选项:全新安装-DskipTests
  • 选择“构建后操作”,然后选择“将战争/战争部署到集装箱”
  • WAR / EAR文件:target / test.war
  • 上下文路径:测试
  • 容器选择tomcat并添加凭据
  • Tomcat URL:示例:http://localhost:8080/

更新'apache-tomcat-8.5.5 \ webapps \ manager \ META-INF \ context.xlm文件。取消注释Value标签。并重新启动服务器

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

答案 2 :(得分:0)

我认为最好的方法应该是部署插件https://www.jdev.it/deploying-your-war-file-from-jenkins-to-tomcat