![](/img/trans.png)
[英]How to configure continuous integration for aws lambda with java using the services of aws aws-codebuild, codedeploy, cloudformation
[英]Access CodeBuild Runtime in CodeDeploy
我正在用 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
奇怪的是,部署失敗並出現以下錯誤:
指定位置的腳本:以 root 用戶身份運行 codedeploy/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 還是我做錯了什么?
CodeBuild 沒有與您的應用程序實例的鏈接,而是僅在收到構建事件的工件時創建運行時。
您不需要每次都使用 appspec.yml 安裝 JAVA 運行時。 我建議您在 EC2 實例上安裝 JAVA 運行時,然后創建一個 AMI,作為將來使用的參考基礎映像,或者您可以繼續使用具有預構建環境的 Elasticbeanstalk。
另一個答案也暗示了這一點,但只是為了澄清:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.