Опыт учит с опаской относиться к умным людям. Чем умнее люди, тем более страшную, прошу прощения, хуйню они делают.
Казалось бы, в AWS работают очень умные люди - и это не шутка - но от некоторых моментов волосы встают дыбом. Да, я снова о семействе Code*, на этот раз о CodeBuild.
Итак, гениальный момент №1: сборки выполняются из под root. Нет смысла объяснять почему это плохо, но к счастью в buildspec есть инструкция run-as, как для всей сборки, так и для конкретных шагов. Однако, откуда нам знать, под каким пользователем надо выполнять сборку если не под рутом? Такой пользователь есть, но его не найти в документации. Я нашел его на SO, и вот где он спрятан.
Гениальный момент №2: как вы догадались, у этого пользователя прописывается путь к домашней директории, но самой домашней директории у него нет! Прибавьте к этому пляски с доступом к ФС, а также сборку Maven’ом, и получается полный антигуманизм. Решается созданием нужной директории и присваиванием этих прав нужному пользователю.
Итоговый файл спецификации выглядит вот так:
version: 0.2
run-as: codebuild-user
phases:
install:
run-as: root
runtime-versions:
java: corretto8
commands:
- mkdir /home/codebuild-user
- aws s3 cp s3://b/settings.xml ~codebuild-user/.m2/settings.xml
- chown -R codebuild-user:codebuild-user ~codebuild-user
build:
commands:
- mvn build # …Другой вариант: создание собственного образа.
Customer obsession’ом отдает за версту, поддержку уведомил.