Travis CI无法将War文件从GitHub正确部署到Azure

时间:2018-08-03 11:22:32

标签: java maven azure travis-ci azure-webapps

我的问题是,打包的war文件没有使用Travis-CI正确地从GitHub部署到Azure-包含生成文件的整个存储库都只是复制粘贴了。这是我的工作:

我的方法:

我遵循有关Azure web app deployment的Travis教程,并尝试以最小的形式实现相同的目的。我的目标是组装一个war文件,并使用Tomcat 8.0容器将其部署到Azure Web应用。

我的项目具有以下.travis.yml配置(为简洁起见,我省略了Java-8定义,Sonar附加组件和Coveralls after_success脚本):

script:
   - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar

deploy:
   provider: azure_web_apps
   skip_cleanup: true

我使用AZURE_WA_USERNAMEAZURE_WA_PASSWORDAZURE_WA_SITE环境变量。

我遵循标准的Maven目录结构。输出目录是标准的/target。因此,在Travis上生成为:

/home/travis/build/MY_USERNAME/MY_WEBAPP/target/MY_WEBAPP.war

其中MY_USERNAME是GitHub登录名,而MY_WEBAPP是我的应用程序的名称。乍看起来,部署看起来不错(我跳过了类似的内容):

Deploying application
[detached HEAD 9fd0ce7] Skip Cleanup Commit
54 files changed, 128 insertions(+)
create mode 100644 target/MY_WEBAPP-0.0.1-SNAPSHOT.war
create mode 100644 target/MY_WEBAPP-0.0.1-SNAPSHOT.war.original
create mode 100644 target/MY_WEBAPP-0.0.1-SNAPSHOT/WEB-INF/classes/... <- Skipped 3 lines
create mode 100644 target/MY_WEBAPP-0.0.1-SNAPSHOT/WEB-INF/lib/...     <- Skipped 20+ lines
... irrelevant ...                                                     <- Skipped 7 lines
Done. Your build exited with 0.

出了什么问题以及应该如何纠正:

如果我通过FTP(S)手动将war文件上传到Azure目录/site/wwwroot/webapps,则可以在一分钟内将其解压缩并部署,并且效果很好。

与手动复制不同,Travis会获取所有内容,然后将其原样复制粘贴到Azure Webapp中,从而导致混乱:

Azure directory structure

war文件尚未上载到webapps文件夹中。新创建的Azure Web应用程序包含site/wwwroot/webapps/ROOT文件夹,需要在war文件夹级别上载ROOT文件。我期望Travis会执行“更智能”的行为。

问题:

如何使用Travis-CI从GitHub正确部署到Azure?我敢打赌,我想念未记录的东西。


我的解决方法尝试:

我已尝试以多种方式修复该问题(没有一个起作用)。我认为它们都很脏:

  1. 我尝试指定要在.travis.yml中部署的内容(无效,所有内容仍被复制):

    file_glob: true
    file: "/home/travis/build/MY_USERNAME/MY_WEBAPP/target/MY_WEBAPP*.war"
    
  2. 丑陋的暴力破解:将输出目录从/target更改为/webapp,以便在部署后在'pom.xml'的<build>部分覆盖Azure中的目标文件夹。 :

    <directory>/webapps</directory>
    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
            <warName>MY_WEBAPP</warName>
            <outputDirectory>/webapps</outputDirectory>
        </configuration>
    </plugin>
    
  3. webapps中将输出文件夹重命名为.travis.yml

    after_success:
     - bash mv /home/travis/build/MY_USERNAME/MY_WEBAPP/target/ /home/travis/build/MY_USERNAME/MY_WEBAPP/webapps/
    
      

    / bin / mv:/ bin / mv:无法执行二进制文件

1 个答案:

答案 0 :(得分:0)

我已经解决了上传部署脚本的问题:

。部署

[config]
command=deployment.cmd

deployment.cmd

@echo off
echo Azure: Deploying site

echo Azure: Removing the current war file
del %DEPLOYMENT_TARGET%\webapps\MY_WEBAPP.war /S /Q

echo Azure: Removing the current webapp folder
rmdir %DEPLOYMENT_TARGET%\webapps\MY_WEBAPP /S /Q

echo Azure: Copying war to the webapps folder
xcopy %DEPLOYMENT_TARGET%\..\repository\target\MY_WEBAPP.war %DEPLOYMENT_TARGET%\webapps /Y /s