簡體   English   中英

AWS CodePipeline 成功,但未正確部署到 Elastic Beanstalk

[英]AWS CodePipeline successful, but not correctly deployed to Elastic Beanstalk

當我調用應用程序 URL 時,將我的 WAR 文件(成功)部署到 Elastic Beanstalk 給我一個 404 Not Found。 我可以在 /var/lib/tomcat8/webapps/ROOT/ 中看到 application.war 文件,而不是 META-INF 和 WEB-INF,當我手動部署時,它就在那里。

當我從 S3 中提取 WAR 文件並手動將其部署到 Elastic Beanstalk 時,它就像一個魅力。 注意:這與 CodeBuild 在我的管道中生成的 WAR 文件相同。 更好的是,如果我將文件安全復制 (scp) 到我的本地計算機並將其上傳到 Elastic Beanstalk,它也能正常工作。

似乎在部署之前一切正常,一個有效的 WAR 文件甚至被部署到 Elastic Beanstalk。

通過eb-activity.log我可以看到它識別出 WAR 文件並將其從臨時目錄部署到/var/lib/tomcat8/webapps/ROOT ,但它沒有解壓,容器/網絡服務器也沒有重新啟動。

如何使用 CodePipeline 正確部署 WAR 文件?

近三年后,AWS Codepipeline 似乎還不是“WAR 文件部署友好”。 正如@Azeq在評論中指出的那樣,標准的 Elastic Beanstalk 部署過程不會解壓縮 war 文件,也不會真正部署任何內容。 CodePipeline 報告成功,因為文件的副本沒有錯誤,但 Tomcat 不會解壓縮 war 文件。

解決方案是以分解形式(已解壓縮)提供您的工件。 為此,請修改構建后階段和 CodeBuild buildspec.yml 的工件定義:

version: 0.2

phases:
    install:
        runtime-versions:
            java: openjdk8
    pre_build:
        commands:
            - echo CODEBUILD_RESOLVED_SOURCE_VERSION $CODEBUILD_RESOLVED_SOURCE_VERSION
    build:
        commands:
            - mvn compile
    post_build:
        commands:
            - mvn package
            - mkdir artifact    <-- create folder to extract war file content
            - unzip target/my.war -d artifact/    <-- unzip to that folder
artifacts:
    files:
        - artifact/**/*   <-- reference all those files as the artifact
    name: artifact
cache:
    paths:
        - '/root/.m2/**/*'

注意構建后階段的mkdirunzip命令,以及artifacts部分中的files定義是如何編寫的。 根據CodeBuild 文檔**/*表示遞歸所有文件

我試圖復制您面臨的問題。 我認為在創建“war”文件時,您將包含“META-INF”和“WEB-INF”文件夾的文件夾作為“war”輸出文件的根目錄。

相反,您應該將所有文件(在上面的文件夾中)放在“war”文件中,而不是根級文件夾。

我也為此掙扎了一段時間。 最后,我能夠通過讓 buildspec.yml 從 post_build 部分中構建的 war 文件中提取 WEB-INF 目錄來解決它

由於 AWS 在您的工件周圍放置了一個 zip 包裝器,因此它會圍繞 elasticbeanstalk 實際需要的內容添加另一個文件夾級別

version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11
  build:
    commands:
       - mvn compile
  post_build:
    commands:
      - mvn package
      - mkdir artifact
      - unzip target/demo-0.0.1-SNAPSHOT.war -d artifact/
      - mv artifact/WEB-INF WEB-INF
artifacts:
  files:
   - WEB-INF/**/*
  name: artifact 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM