无法使用AWS CodeDeploy部署Springboot应用程序AWS Ubuntu实例

时间:2020-01-26 06:37:34

标签: java amazon-web-services spring-boot continuous-integration aws-code-deploy

我有一个Spring Boot应用程序,无法使用AWS Code Deploy部署到AWS Ubuntu实例

这是appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /opt/ubuntu/server

permissions:
  - object: /
    pattern: "**"
    owner: ubuntu
    group: ubuntu

hooks:
  ApplicationStop:
    - location: stop_server.sh
      timeout: 20
      runas: root
  ApplicationStart:
    - location: start_server.sh
      timeout: 300
      runas: ubuntu

stop_server.sh文件

#!/usr/bin/env bash

# Kill Java process

# Determine the pid
PID=`ps -C java -o pid=`

kill -9 $PID

start_srver.sh文件

#!/usr/bin/env bash
cd /opt/ubuntu/server
rm -rf target/*
sudo mvn clean package
sudo mvn spring-boot:run -Drun.jvmArguments='-Dserver.port=8080' > /dev/null 2> /dev/null < /dev/null &

CodeDeploy卡在安装阶段,我得到的错误是找不到mvn命令

我登录到实例并检查了mvn命令是否工作正常,但是使用codedeploy代理时,它无法正常工作

我已经设置了〜/ .profile和〜/ .bashrc文件的路径,但仍然无法正常工作

GitHub的存储库位置为Repository Link

4 个答案:

答案 0 :(得分:0)

codeDeploy以root用户身份执行,因此请尝试检查root用户是否已安装mvn。 和 ApplicationStart: -位置:start_server.sh 超时:300 符文:根 而不是ubuntu以root身份运行。

答案 1 :(得分:0)

Maven是一个构建系统。我不建议将其用作部署的一部分。单独构建应用程序(也许在笔记本电脑上),然后使用CodeDeploy复制代码(jar文件等),并运行一些内部管理流程(例如,启动apache服务)。不要在每个部署上都构建应用程序,因为您会看到构建失败将导致部署失败。

查看错误:找不到mvn命令

最好在脚本中指定mvn命令的完整路径,例如:

sudo / bin / mvn清洁程序包

注意:请确认路径。

答案 2 :(得分:0)

使用Code Pipeline创建流程,与Code Commit或Github repo集成以获取代码。使用代码构建来创建必要的构件,并在代码部署中使用构件。代码构建具有用于使用必要工具(例如Java Maven Docker)创建构建环境的选项。

答案 3 :(得分:0)

我在EC2 Ubuntu实例中以root用户身份安装了maven和代码部署代理,但仍然得到 mvn命令

我登录到实例并尝试检查mvn命令是否正常运行,但是我无法理解为什么mvn命令不能与代码部署过程一起使用。

需要帮助

这是 appspec.yml 文件

version: 0.0
os: linux
files:
  - source: /
    destination: /opt/root/server

permissions:
  - object: /
    pattern: "**"
    owner: root
    group: root

hooks:
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 60
      runas: root
  ApplicationStart:
    - location: scripts/start_server.sh
      timeout: 60
      runas: root

start_server.sh文件

mvn clean package
mvn spring-boot:run -Drun.jvmArguments='-Dserver.port=8080' > /dev/null 2> /dev/null < /dev/null &

stop_server.sh

#!/usr/bin/env bash

# Kill Java process

# Determine the pid
echo "killing process starts"
PID=`ps -C java -o pid=`

if [ -n "$PID" ]; then
    echo "killing process"
    kill -9 $PID
else
    echo "empty"
fi

cd /opt
rm -rf root