我的问题是打包的war
文件没有正确地使用 Travis-CI 从 GitHub 部署到 Azure - 带有生成文件的整个存储库只是复制粘贴。这是我所做的:
我的做法:
我遵循有关Azure Web 应用程序部署的 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_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.
什么是错的以及它应该如何正确:
war
如果我通过 FTP(S)手动将文件上传到 Azure 目录/site/wwwroot/webapps
,它会在一分钟内解压缩并部署并且运行良好。
与手动复制不同,Travis 获取所有内容并将其按字面意思复制粘贴到 Azure webapp 中,从而导致如下混乱:
该war
文件尚未上传到webapps
文件夹中。新创建的 Azure webapp 包含site/wwwroot/webapps/ROOT
文件夹,需要在文件夹级别上传war
文件。ROOT
我预计特拉维斯会表现出“更聪明”的行为。
问题:
如何正确使用 Travis-CI 从 GitHub 部署到 Azure?我敢打赌我错过了一些没有记录的东西。
我的解决方法尝试:
我试图以几种方式解决这个问题(它们都没有奏效)。我认为它们都很脏:
我试图指定要部署的
.travis.yml
内容(无效,仍然复制所有内容):file_glob: true file: "/home/travis/build/MY_USERNAME/MY_WEBAPP/target/MY_WEBAPP*.war"
一个丑陋的蛮力:在“pom.xml”部分部署时将输出目录从更改
/target
为/webapp
结果以覆盖Azure中的目标文件夹:<build>
<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>
将输出文件夹重命名为
webapps
in.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: 无法执行二进制文件