代码之家  ›  专栏  ›  技术社区  ›  Nikolas Charalambidis

Travis CI没有从GitHub将war文件正确部署到Azure

  •  1
  • Nikolas Charalambidis  · 技术社区  · 6 年前

    我的问题是 war 文件未正确使用Travis CI从GitHub部署到Azure-生成文件的整个存储库只是复制粘贴。以下是我的工作:

    我的方法:

    我跟随特拉维斯教程 Azure web app deployment 尽量以最小的形式达到同样的效果。我的目标是 战争 使用Tomcat 8.0容器将其归档并部署到Azure web应用程序。

    我的项目有以下内容 .travis.yml 配置(为了简洁起见,我省略了Java-8定义、声纳附加组件和成功脚本后的工作服):

    script:
       - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar
    
    deploy:
       provider: azure_web_apps
       skip_cleanup: true
    

    我用 AZURE_WA_USERNAME , AZURE_WA_PASSWORD AZURE_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文件到Azure目录 /site/wwwroot/webapps ,一分钟内即可打开并展开,效果良好。

    与手动复制不同,Travis将所有内容复制粘贴到Azure webapp中,导致如下混乱:

    Azure directory structure

    这个 战争 文件尚未上载到 webapps 文件夹。新创建的Azure webapp包含 site/wwwroot/webapps/ROOT 文件夹,需要上载 战争 上的文件 ROOT 文件夹级别。我原以为特拉维斯会表现出“更聪明”的行为。

    问题:

    如何正确使用Travis CI从GitHub部署到Azure?我打赌我错过了一些没有记录的东西。


    我的解决方法尝试:

    我试着用几种方法修理这东西(都没用)。我认为他们都是肮脏的:

    1. 我试图指定要在其中部署什么 特拉维斯·yml (没有效果,所有内容仍被复制):

      file_glob: true
      file: "/home/travis/build/MY_USERNAME/MY_WEBAPP/target/MY_WEBAPP*.war"
      
    2. 丑陋的bruteforce:将输出目录从 /目标 /webapp 在中部署时重写Azure中的目标文件夹的结果 <build> “pom.xml”部分:

      <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. 将输出文件夹重命名为 网络应用 在里面 特拉维斯·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 回复  |  直到 6 年前
        1
  •  0
  •   Nikolas Charalambidis    6 年前

    我已解决上载部署脚本的问题:

    .部署

    [config]
    command=deployment.cmd
    

    部署.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