Доступ к среде выполнения CodeBuild в CodeDeploy - PullRequest
0 голосов
/ 02 июля 2019

Я создаю простое приложение Hello World в Java (на основе Spring), которое я запускаю в 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

Как ни странно, развертывание завершается неудачно со следующей ошибкой:

Сценарий в указанном месте: codedeploy / ApplicationStart.sh Запуск от имени пользователя root не выполнен с кодом выхода 127

Выходной журнал:

[stderr] / opt / codedeploy-agent / развертывание-root / 5092b759-ecc4-44cb-859a-9823734abc04 / d-GVQ6R854B / развертывание-архив / codedeploy/ApplicationStart.sh: строка 9: java: команда не найдена

Это кажется очень нелогичным, поскольку я установил java в buildspec.yml.Нужно ли снова устанавливать Java вручную в сценарии ApplicationStart или я делаю что-то еще неправильно?

1 Ответ

0 голосов
/ 02 июля 2019

CodeBuild не имеет связи с экземпляром приложения, вместо этого он создает среду выполнения только при получении артефактов для события сборки.

Вам не нужно каждый раз устанавливать JAVA во время работы с appspec.yml. Я бы порекомендовал вам установить среду выполнения JAVA на экземпляр EC2, а затем создать AMI в качестве базового образа для будущего использования, или вы можете продолжить работу с Elasticbeanstalk, в котором уже есть готовые среды.

...