Я пытаюсь динамически установить имя и тег изображения для AWS Elastic Beanstalk в моем файле Dockerrun.aws.json:
"Image": {
"Name": "IMAGETAG",
"Update": "true"
}
со следующей командой sed в качестве скрипта в моем файле GI GitLab:
sed -i.bak "s|IMAGETAG|$CONTAINER_TEST_IMAGE|" Dockerrun.aws.json && rm Dockerrun.aws.json.bak; eb deploy Production
Где $CONTAINER_TEST_IMAGE
- это проверенная хорошая переменная среды (протестировано с помощью echo $CONTAINER_TEST_IMAGE
в качестве скрипта). $CONTAINER_TEST_IMAGE
содержит структуру следующего содержимого (где ... - полный идентификатор):
gitlab.company.com:123/my-group/my-project:core_7de09851...8f_testing
Проблема, с которой я сталкиваюсь, заключается в том, что sed не работает во время конвейера CI. Я не понимаю, почему, учитывая, что если я установлю переменную среды локально и запуском той же команды, она успешно заменит значение Name
на тот же URL структуры. Это тестирование проводилось на Macbook.
Я знаю, что файл не обновляется, потому что журнал Gitlab CI сообщает
WARN: Failed to pull Docker image IMAGETAG:latest, retrying...
Я пробовал несколько вещей, которые не работали:
- Выполнение команд
sed
и eb deploy
в виде отдельных сценариев (две разные строки в файле CI)
- Переключите переменную, которую я хочу заменить в Dockerrun.aws.json, на
<IMAGE>
- Пока он был на
<IMAGE>
, вместо * .bak выполнялся sed -i='' "s|<IMAGE>|$CONTAINER_RELEASE_IMAGE|" Dockerrun.aws.json
, а затем записывался (я где-то читал, что sed имеет несоответствия в OSX с версией -i = '')
Есть ли у кого-нибудь мысли о том, что это за проблема и как ее можно решить?