Автоматическое развертывание Jenkins не удалось, если все настройки верны. - ошибка в mapperLocations, Spring (незаконноеArgumentException, TomcatManagerException) - PullRequest
2 голосов
/ 29 мая 2020

Я хочу поделиться некоторыми решениями проблемы автоматического развертывания Jenkins, которые я не смог найти на inte rnet, включая здесь. Но я почти новичок в StackOverflow, поэтому я здесь, чтобы спросить себя и сразу же ответить себе. // Я попытался поделиться решением publi c по проблеме с GitHub, я тоже не смог его использовать. // прошу прощения ... Я использую Spring MVC 4.3.9, подключенный к CI / CD. // Ветка GitHub -> Jenkins -> TestServer (Tomcat 8.5)

Я разрешил все IP-адреса, создал и установил правильную учетную запись Tomcat Manager как в меню учетных данных Jenkins, так и в tomcat. Но всегда возникает одна и та же ошибка - исключение TomcatManagerException, а также исключение недопустимого аргумента (в полном журнале из Jenkins с помощью параметра сборки maven, -X -e, не уверен). // Те же результаты, как с плагином Deploy war, так и с плагином SSH_publi sh.

Вот вывод консоли Jenkins. (Я не думаю, что это полный журнал.)

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.895 s
[INFO] Finished at: ~~~Time~~~
[INFO] ------------------------------------------------------------------------
[DeployPublisher][INFO] Attempting to deploy 1 war file(s)
[DeployPublisher][INFO] Deploying ~~YourDIR&WAR~~ to container Tomcat 8.x Remote with context ~~YourContextName~~
  Redeploying [ ~~YourDIR&WAR~~]
  Undeploying  ~~YourDIR&WAR~~]
  Deploying [ ~~YourDIR&WAR~~]
ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to deploy [ ~~YourDIR&WAR~~]
    at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:104)
    at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:180)
    at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)
    at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)
    at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)
    at hudson.FilePath.act(FilePath.java:1075)
    at hudson.FilePath.act(FilePath.java:1058)
    at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)
    at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)
    at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)
    at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
    at hudson.model.Build$BuildExecution.post2(Build.java:186)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
    at hudson.model.Run.execute(Run.java:1905)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:428)
Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "FAIL - Deployed application at context path [~~YourContextName~~] but context failed to start
" instead of the expected "OK" message
    at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:721)
    at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deployImpl(TomcatManager.java:767)
    at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deploy(TomcatManager.java:312)
    at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:99)
    ... 19 more
org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "FAIL - Deployed application at context path [~~YourContextName~~] but context failed to start
" instead of the expected "OK" message
    at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:721)
    at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deployImpl(TomcatManager.java:767)
    at org.codehaus.cargo.container.tomcat.internal.TomcatManager.deploy(TomcatManager.java:312)
    at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:99)
    at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:180)
    at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)
    at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)
    at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)
    at hudson.FilePath.act(FilePath.java:1075)
    at hudson.FilePath.act(FilePath.java:1058)
    at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)
    at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)
    at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)
    at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
    at hudson.model.Build$BuildExecution.post2(Build.java:186)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
    at hudson.model.Run.execute(Run.java:1905)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:428)
Build step 'Deploy war/ear to a container' marked build as failure
Finished: FAILURE

* Я также получил исключение недопустимого аргумента в консоли maven в настройке mapperLocations. ===> Это ключ

1 Ответ

0 голосов
/ 29 мая 2020
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://yourDBurl:yourport/yourDBname" />
        <property name="username" value="youraccountname" />
        <property name="password" value="youraccountpassword" />
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:my/package/mapper/*.xml" />
    </bean>
<!--
// This is a part of the root-context.xml
// in `src/main/java/my/package/mapper`, there are XML mapper files. // "src/main/java"
// -- In my case, the mappers were in the classpath `src/main/java`
-->

Это была моя первоначальная настройка маппера (вызывающая ошибку). Этот параметр отлично работал, когда я запускаю проект Spring на локальном сервере. Также в случае, если я экспортировал файл войны в eclipse, затем разверните войну собственноручно на сервере вручную. Также в случае, если я экспортировал файл войны в eclipse, затем разверните войну с Tomcat Manager на сервере вручную. ** Но недоступно только для Jenkins. Сборка Maven всегда была успешной, но только при развертывании. ** * Решение * => Я изменил настройку картографа в проекте Spring и перенёс картографы с src/main/java на src/main/resources => Причина ошибки, которую я предположил, заключается в том, что Дженкинс не может читать, <property name="mapperLocations" value="classpath:my/package/mapper/*.xml" />, это конфигурация. => Та же конфигурация JDB C, я изменил только настройку mybatis следующим образом.

<!-- with same jdbc config -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="configLocation" value="classpath:mybatis/mybatis-configuration.xml" />
   </bean>
<!--
// This is a part of the root-context.xml
// NOW in `src/main/resources/my/package/mapper`, there are XML mapper files. // "src/main/resources"
-->

=> В src/main/resources/mybatis-configuration.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <!-- <typeAlias alias="yourDTO" type="my.package.dto.yourDTO"></typeAlias> -->
    </typeAliases>
    <mappers>
        <mapper resource="mybatis/mapper/yourmapper.xml" />
        <!-- mappers, and so on -->
    </mappers>
</configuration>

=> Поместите картографы mybatis в каталог src/main/resources/mapper. Напишите yourmapper.xml как обычный mybatis mapper XML файл.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="my.package.dto.yourDTO">
    <!-- your mybatis tag with SQL query -->
</mapper>

PS - Я только что догадался, что Дженкинс не может читать картографы в src/main/java. - Я на самом деле не понимал и не анализировал открытый исходный код Jenkins. - Итак, причина, которую я указал, может быть неправильной, но, по крайней мере, в моем загадочном случае было доступно автоматическое развертывание с Jenkins. - Надеюсь, это может быть полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...