我正在用java(基于spring)构建一个简单的hello world应用程序,我通过管道将其启动到AWS。
buildspec.yml 定义如下:
version: 0.2
phases:
install:
runtime-versions:
java: openjdk8
build:
commands:
- mvn package
artifacts:
files:
- '**/*'
appspec.yml 如下:
version: 0.0
os: linux
files:
- source: target/helloworld-1.0-SNAPSHOT.jar
destination: /tmp
hooks:
ApplicationStart:
- location: codedeploy/ApplicationStart.sh
timeout: 60
runas: root
文件codedeploy/ApplicationStart.sh:
#!/usr/bin/env bash
JAR_FILE_HOME='/tmp/helloworld-1.0-SNAPSHOT.jar'
java -jar JAR_FILE_HOME
奇怪的是,部署失败并出现以下错误:
Script at specified location: codedeploy/ApplicationStart.sh run as user root failed with exit code 127
输出日志:
[stderr]/opt/codedeploy-agent/deployment-root/5092b759-ecc4-44cb-859a-9823734abc04/d-GVQ6R854B/deployment-archive/codedeploy/ApplicationStart.sh: line 9: java: command not found
这似乎非常违反直觉,因为我已经在 buildspec.yml 中安装了 java。我是否需要在 ApplicationStart 脚本中再次手动安装 java 还是我做错了什么?
最佳答案
CodeBuild 没有与您的应用程序实例的链接,而是仅在收到构建事件的工件时创建运行时。
您不需要每次都使用appspec.yml安装JAVA运行时。我建议您在 EC2 实例上安装 JAVA 运行时,然后创建 AMI,作为将来使用的引用基础镜像,或者您可以继续使用具有预构建环境的 Elasticbeanstalk。
关于java - 在 CodeDeploy 中访问 CodeBuild 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56858417/