AWS CodeDeploy: Java приложение не работает, несмотря на успешное развертывание - PullRequest
1 голос
/ 25 апреля 2020

Я борюсь со странной проблемой. Я пытаюсь развернуть приложение сервлета tomcat java на ec2, используя AWS CodeBuild и CodeDeploy.

После нескольких уроков и видео я успешно настроил его, и оно действительно развертывает приложение на моем ec2, но мой сервис не отвечает на желаемые URL. Я попытался найти процессы на порте 8080, но ни один из них не доступен.

мой BuildSpe c .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/**/*'

Мой appspe c .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 были успешно выполнены.

Но безрезультатно, результат будет выглядеть следующим образом server could not be reached

Интересно, что AWS CodePipeline скопировала все нужные артефакты сборки, как и ожидалось.

enter image description here

Если я запускаю start_server.sh на мой экземпляр ec2 вручную с помощью команды

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:~$ 

Он работает нормально, и сервис становится доступным enter image description here

Любой ответ и подсказка высоко ценится, так как я уже провел два дня отладить это без пользы.

1 Ответ

0 голосов
/ 29 апреля 2020

Очевидно, что ваше приложение не запущено CodeDeploy. Тот факт, что вы видите две строки:

"deploying Mudoku-webapp.war"

&

"done deploying Mudoku-webapp.war"

ничего не значит, интересный вывод получен из:

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

, который перенаправлен на нуль , Нужно ли вашему приложению интерактивный терминал для работы? Можете ли вы перенаправить вывод выполнения java в файл и проверить его на наличие подсказок.

...