【问题标题】:Travis CI doesn't deploy to Azure from GitHub the war file correctlyTravis CI 未从 GitHub 正确部署到 Azure 战争文件
【发布时间】:2023-03-24 09:54:01
【问题描述】:

我的问题是打包的 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 Web 应用程序中,导致如下混乱:

war 文件尚未上传到webapps 文件夹。新创建的 Azure webapp 包含site/wwwroot/webapps/ROOT 文件夹,需要在ROOT 文件夹级别上传war 文件。我预计 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”的 &lt;build&gt; 部分时覆盖 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. .travis.yml中的输出文件夹重命名为webapps

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

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

【问题讨论】:

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


    【解决方案1】:

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

    .deployment

    [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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2014-11-13
      • 1970-01-01
      相关资源
      最近更新 更多