多个WAR包部署至Azure Web应用的GitHub Actions配置问题
解决方案
报错原因
你当前部署步骤中配置的package: '*.war'通配符匹配到了两个WAR包,部署插件无法判定优先部署哪个包,因此抛出匹配冲突错误。
实现逻辑
Azure App Service 部署WAR包到Tomcat运行时环境时,默认遵循Tomcat部署规则:
- 名为
ROOT.war的包会自动部署到站点根路径/ - 名为
xxx.war的包会自动部署到站点的/xxx路径,完全匹配你需要的/services路径需求
修改后的完整GitHub Actions配置
on: push: branches: - master workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Java version uses: actions/setup-java@v1 with: java-version: '11' - name: Build with Maven run: mvn clean install - name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: java-app path: '${{ github.workspace }}/**/target/*.war' deploy: runs-on: ubuntu-latest needs: build environment: name: 'Production' url: ${{ steps.deploy-frontend.outputs.webapp-url }} steps: - name: Download artifact from build job uses: actions/download-artifact@v2 with: name: java-app - name: Rename frontend WAR to ROOT for root path deployment run: mv application.war ROOT.war - name: Deploy frontend to root path id: deploy-frontend uses: azure/webapps-deploy@v2 with: app-name: 'app-name' slot-name: 'Production' publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }} package: 'ROOT.war' - name: Deploy backend to /services path uses: azure/webapps-deploy@v2 with: app-name: 'app-name' slot-name: 'Production' publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }} package: 'services.war'
注意事项
- 请确认你的Azure App Service运行时栈选择的是与Java 11兼容的Tomcat版本(推荐Tomcat 9.x)
- 后端接口部署后访问路径会自动带上
/services前缀,例如原本接口路径为/api/user,部署后访问路径为https://你的域名/services/api/user - 如果执行重命名步骤时提示找不到
application.war,请调整mv命令的路径为下载后WAR包的实际存放路径
内容的提问来源于stack exchange,提问作者JSar
相关产品推荐
相关产品推荐

