Travis CI 未从 GitHub war 文件正确部署到 Azure
Travis CI doesn't deploy to Azure from GitHub the war file correctly
我的问题是打包的 war
文件没有从 GitHub 正确使用 Travis-CI 部署到 Azure - 包含生成文件的整个存储库只是 copy-pasted .这是我的工作:
我的做法:
我遵循有关 Azure web app deployment 的 Travis 教程,并尝试以最小形式实现相同目标。我的目标是 assemble 一个 war
文件并使用 Tomcat 8.0 容器将其部署到 Azure Web 应用程序。
我的项目具有以下 .travis.yml
配置(为了简洁起见,我省略了 Java-8 定义、Sonar add-ons 和 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.
哪里错了,应该怎么改:
如果我通过 FTP(S) 手动将 war
文件上传到 Azure 目录 /site/wwwroot/webapps
,它会在一分钟内解压并部署并且运行良好。
与手动复制不同,Travis 将所有内容 copy-paste 逐字地放入 Azure webapp 中,导致混乱,如:
war
文件尚未上传到 webapps
文件夹。新创建的 Azure webapp 包含 site/wwwroot/webapps/ROOT
文件夹,需要在 ROOT
文件夹级别上传 war
文件。我预计特拉维斯会执行 "smarter" 行为。
问题:
如何正确使用Travis-CI从GitHub部署到Azure?我打赌我错过了一些没有记录的东西。
我的workaround-attempts:
我已尝试通过多种方式解决该问题(none 已成功解决)。我认为它们都很脏:
我试图在.travis.yml
中指定要部署的内容(没有效果,仍然复制所有内容):
file_glob: true
file: "/home/travis/build/MY_USERNAME/MY_WEBAPP/target/MY_WEBAPP*.war"
一个丑陋的暴力破解:将输出目录从 /target
更改为 /webapp
导致在部署到“的 <build>
部分时覆盖 Azure 中的目标文件夹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>
在 .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: cannot execute binary file
我已经解决了上传部署脚本的问题:
.部署
[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
我的问题是打包的 war
文件没有从 GitHub 正确使用 Travis-CI 部署到 Azure - 包含生成文件的整个存储库只是 copy-pasted .这是我的工作:
我的做法:
我遵循有关 Azure web app deployment 的 Travis 教程,并尝试以最小形式实现相同目标。我的目标是 assemble 一个 war
文件并使用 Tomcat 8.0 容器将其部署到 Azure Web 应用程序。
我的项目具有以下 .travis.yml
配置(为了简洁起见,我省略了 Java-8 定义、Sonar add-ons 和 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.
哪里错了,应该怎么改:
如果我通过 FTP(S) 手动将 war
文件上传到 Azure 目录 /site/wwwroot/webapps
,它会在一分钟内解压并部署并且运行良好。
与手动复制不同,Travis 将所有内容 copy-paste 逐字地放入 Azure webapp 中,导致混乱,如:
war
文件尚未上传到 webapps
文件夹。新创建的 Azure webapp 包含 site/wwwroot/webapps/ROOT
文件夹,需要在 ROOT
文件夹级别上传 war
文件。我预计特拉维斯会执行 "smarter" 行为。
问题:
如何正确使用Travis-CI从GitHub部署到Azure?我打赌我错过了一些没有记录的东西。
我的workaround-attempts:
我已尝试通过多种方式解决该问题(none 已成功解决)。我认为它们都很脏:
我试图在
.travis.yml
中指定要部署的内容(没有效果,仍然复制所有内容):file_glob: true file: "/home/travis/build/MY_USERNAME/MY_WEBAPP/target/MY_WEBAPP*.war"
一个丑陋的暴力破解:将输出目录从
/target
更改为/webapp
导致在部署到“的<build>
部分时覆盖 Azure 中的目标文件夹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>
在
.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: cannot execute binary file
我已经解决了上传部署脚本的问题:
.部署
[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