簡體   English   中英

AWS CodeDeploy:Java 應用程序未啟動,盡管部署成功

[英]AWS CodeDeploy: Java application is not up despite being successful deployment

我正在努力解決一個奇怪的問題。 我正在嘗試使用 AWS CodeBuild 和 CodeDeploy 在 ec2 上部署基於 tomcat 的 java servlet 應用程序。

經過幾個教程和視頻后,我成功設置了它,它確實在我的 ec2 上部署了應用程序,但我的服務沒有響應所需的 URL。 我試圖在端口 8080 上查找進程,但沒有可用的進程。

我的 BuildSpec.yml 如下所示

version: 0.2
env:
  variables:
    JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64"
phases:
  install:
    commands:
      - echo installing maven...
      - apt-get update -y
      - apt-get install -y maven
  build:
    commands:
      - echo building Mudoku-webapp
      - mvn install
artifacts:
  files:
    - target/*.war
    - target/dependency/webapp-runner.jar
    - scripts/*.sh
    - appspec.yml
  discard-paths: yes
cache:
  paths:
    - '/root/.m2/**/*'

我的 appspec.yml 如下所示:

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu
hooks:
  AfterInstall:
    - location: fix_previleges.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: stop_server.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: start_server.sh
      timeout: 300
      runas: root

在部署期間執行的腳本是

fix_previleges.sh

#!/bin/bash

echo "Setting executable previliges for all the scripts and required jars"
chmod +x /home/ubuntu/*.jar
chmod +x /home/ubuntu/*.sh
echo "Done setting the previliges for needed scripts and jars"

start_server.sh

#!/bin/bash

echo "deploying Mudoku-webapp.war"
java -jar webapp-runner.jar *.war </dev/null &>/dev/null &
echo "done deploying Mudoku-webapp.war"

stop_server.sh

#!/bin/bash

echo "Killing process on port 8080"
kill -9 $(lsof -t -i:8080)
echo "Done killing the process on port 8080"

部署日志看起來符合預期

[2020-04-25 15:48:42.336] [d-OB5YU0VQ2]LifecycleEvent - ApplicationStop
[2020-04-25 15:48:42.336] [d-OB5YU0VQ2]Script - stop_server.sh
[2020-04-25 15:48:42.389] [d-OB5YU0VQ2][stdout]Killing process on port 8080
[2020-04-25 15:48:42.398] [d-OB5YU0VQ2][stderr]kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
[2020-04-25 15:48:42.398] [d-OB5YU0VQ2][stdout]Done killing the process on port 8080
[2020-04-25 15:48:46.679] [d-OB5YU0VQ2]LifecycleEvent - AfterInstall
[2020-04-25 15:48:46.680] [d-OB5YU0VQ2]Script - fix_previleges.sh
[2020-04-25 15:48:46.736] [d-OB5YU0VQ2][stdout]Setting executable previliges for all the scripts and required jars
[2020-04-25 15:48:46.738] [d-OB5YU0VQ2][stdout]Done setting the previliges for needed scripts and jars
[2020-04-25 15:48:47.723] [d-OB5YU0VQ2]LifecycleEvent - ApplicationStart
[2020-04-25 15:48:47.723] [d-OB5YU0VQ2]Script - start_server.sh
[2020-04-25 15:48:47.775] [d-OB5YU0VQ2][stdout]deploying Mudoku-webapp.war
[2020-04-25 15:48:47.776] [d-OB5YU0VQ2][stdout]done deploying Mudoku-webapp.war

預計會出現 kill 錯誤,因為端口 8080 上沒有運行任何進程,但我認為這不會影響進一步的執行。

日志中的最后兩條語句明確暗示start_server.sh已成功執行。

但沒有任何好處,結果看起來像這樣無法訪問服務器

有趣的是,AWS CodePipeline 復制了所有所需的構建工件,並按預期復制。

在此處輸入圖像描述

如果我使用命令在我的 ec2 實例上手動運行start_server.sh

ubuntu@ip-172-31-27-194:~$ ls
Mudoku-webapp.war  appspec.yml  fix_previleges.sh  install  start_server.sh  stop_server.sh  webapp-runner.jar
ubuntu@ip-172-31-27-194:~$ ./start_server.sh 
deploying Mudoku-webapp.war
done deploying Mudoku-webapp.war
ubuntu@ip-172-31-27-194:~$ 

它工作正常,服務可用在此處輸入圖像描述

任何答案和提示都非常感謝,因為我已經花了兩天時間來調試這個沒有任何收獲。

顯然,您的應用程序不是由 CodeDeploy 啟動的。 您看到兩行的事實:

"deploying Mudoku-webapp.war"

&

"done deploying Mudoku-webapp.war"

沒什么意思,有趣的 output 來自:

java -jar webapp-runner.jar *.war </dev/null &>/dev/null &

它被重定向到 null。 您的應用程序是否需要交互式終端才能工作? 您能否將 java 執行的 output 重定向到文件並檢查是否有任何線索。

暫無
暫無

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

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