Я использую API GraphQL через AWS Elasti c Beanstalk с Docker. Чтобы включить уведомления pu sh, я использую Node-APN (https://github.com/node-apn/node-apn) и передаю ему файл AuthKey.p8
, который содержит секретный ключ, например:
-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----
This файл должен быть отформатирован с этими точными 6 строками, иначе токен, сгенерированный APNS, не будет работать и вылетает API. Чтобы заставить его работать локально, я конвертирую его в одну строку и помещаю \ n для каждого перевода строки.
В моем конвейере CI я выполняю следующее (сокращенно для краткости):
command: echo "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxx\n-----END PRIVATE KEY-----" >> AuthKey.p8
Эта линия работает локально идеально. Он выводит ключ в файл и правильно его форматирует. В конвейере CI (Circle Ci) он не может удалить \ n и держит все это в одной строке, что в конечном итоге приводит к сбою генератора токенов APNS. Я пробовал как жестко кодировать ключ через файл конвейера окружности ci, так и извлекать его из переменных ENV, и ни одна из них не работает.
Конечный результат будет следующим:
- CI создает docker image и вставляет
AuthKey.p8
, делая это с помощью команды echo - AWS загружает образ docker, а моя библиотека ENV позаботится обо всем остальном
Неважно что я пытаюсь, я не могу заставить AuthKey.p8
правильно отформатировать, несмотря на то, что он работает нормально локально с теми же командами. Я также попытался передать ключ напрямую в node-apn, так как он поддерживает передачу ключа напрямую, но я также столкнулся с теми же проблемами форматирования, которые усугубляются тем фактом, что единственный способ правильно импортировать его - это окружить одну строку переносы новой строки в двойных кавычках, но AWS не поддерживает это в своих переменных ENV.