【问题标题】:How to deploy war to tomcat using jenkins pipeline?如何使用詹金斯管道将战争部署到tomcat?
【发布时间】:2019-06-14 18:18:44
【问题描述】:

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

有没有标准的方法来做到这一点

【问题讨论】:

  • 您在 jenkins 中使用的是脚本化管道还是声明性管道?这也是您的主要问题:如何在 tomcat 中检测成功部署?
  • 太宽泛了,你必须分享一些代码或至少一些更多细节。
  • @JRichardsz 使用 groovy 语法
  • 我的回答对你有帮助吗?

标签: tomcat jenkins jenkins-pipeline devops


【解决方案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
    

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

    将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
    

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

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

    /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 端点。此策略将允许您从外部平台监控您的应用,例如:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-19
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多