java - 在 CodeDeploy 中访问 CodeBuild 运行时

标签 java amazon-web-services aws-code-deploy aws-codebuild

我正在用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/

相关文章:

git - AWS CodeDeploy 找不到私有(private)存储库 "could not download bundle"的 github tar 链接

java - Cucumber 将场景迁移到场景大纲

java - Android.view.View错误

javascript - dynamodb在列表中添加对象到列表中的对象内nodejs

node.js - AWS S3 - 以八位字节流的形式获取 PDF 并上传到 S3 存储桶

node.js - 询问对话框 (cli) 不理解 intent 中的 AMAZON.NUMBER 槽

linux - 如何通过 CodeDeploy 工具从 Bitbucket 正确部署到不同的实例(Beta/Production)

amazon-web-services - 即使成功执行 CodeBuild Pipeline 后,Lambda 函数也不会更新

Java 模式 : when does it make sense to use temporary variables

java - 否则,如果在未选中单选按钮时循环不停止,则下一个 Activity 无论如何都会打开