首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CodeBuild中访问CodeDeploy运行时

在CodeBuild中访问CodeDeploy运行时
EN

Stack Overflow用户
提问于 2019-07-02 18:41:34
回答 2查看 379关注 0票数 0

我正在用java (基于spring)构建一个简单的hello world应用程序,我通过管道将其启动到AWS。

buildspec.yml的定义如下:

代码语言:javascript
复制
version: 0.2

phases:
  install:
    runtime-versions:
      java: openjdk8
  build:
    commands:
      - mvn package

artifacts:
  files:
    - '**/*'

对于appspec.yml,如下所示:

代码语言:javascript
复制
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

文件代码部署/ApplicationStart.sh:

代码语言:javascript
复制
#!/usr/bin/env bash

JAR_FILE_HOME='/tmp/helloworld-1.0-SNAPSHOT.jar'

java -jar JAR_FILE_HOME

奇怪的是,部署失败时会出现以下错误:

脚本位于指定位置:代码部署/ApplicationStart.sh作为用户根运行,退出代码127失败

输出日志:

stderr/opt/codedeploy-agent/deployment-root/5092b759-ecc4-44cb-859a-9823734abc04/d-GVQ6R854B/deployment-archive/codedeploy/ApplicationStart.sh:第9行: java:命令未找到

这似乎非常违背直觉,因为我已经在buildspec.yml中安装了java。我是否需要再次在ApplicationStart脚本中手动安装java,还是做了其他错误的事情?

EN

回答 2

Stack Overflow用户

发布于 2019-07-02 18:48:33

CodeBuild没有与应用程序实例的链接,相反,它只在收到用于构建事件的构件时才创建运行时。

您不需要每次使用appspec.yml安装JAVA。我建议您在EC2实例上安装JAVA运行时,然后创建一个AMI,作为将来使用的参考基映像,或者您可以继续使用具有预先构建环境的Elasticbean茎。

票数 0
EN

Stack Overflow用户

发布于 2020-09-18 19:40:14

另一个答案也提出了这一点,但只是为了澄清:

  • CodeBuild (在buildspec.yml中指定)执行工件创建。简单地说,它接受您的代码并创建jar。您在这里定义了java版本。但是,这与部署它的实例无关。它是生成的图像。
  • CodeDeploy (在appspec.yml中指定)负责在您定义和拥有的实例上部署工件。如果手动创建目标实例,则需要在那里使java可用。正如matesio所建议的,您可以使用适当的java env简化/自动化实例创建,但这是您的责任,因为这是您的实例(不像AWS在后台配置的用于构建的env )。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56858417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档