Рубрики
Без рубрики

Развертывание частных пакетов Python Github на Heroku без предоставления учетных данных в коде

Недавно мы столкнулись с проблемой развертывания в среде heroku python. В развертывании heroku python он выполнит установку pip requirements.txt и установите пакеты в файл. Но когда у вас есть…

Автор оригинала: Bruce Kuo.

Недавно мы столкнулись с проблемой развертывания в среде heroku python.

В развертывании heroku python он выполнит pip install requirements.txt и установите пакеты в файл. Но когда у вас есть частный пакет, все становится сложнее.

Цель

То, что мы хотим сделать, – это установить наш частный пакет, который находится на github. Просто сделайте одну из следующих команд успешной:

  • pip установить git+https://github.com/my_account/myrepo.git
  • pip install git+ssh://github.com/my_account/myrepo.git
  • pip install git+https://{имя пользователя}:{пароль}@github.com/my_account/myrepo.git

Сложность здесь в том, что вы не хотите фиксировать какие-либо учетные данные или пароль в git, потому что это вызывает множество проблем с безопасностью. Итак, как сообщить heroku, что учетные данные в сборке являются ключевым моментом этой проблемы.

Сторонние решения для сборки пакетов

На самом деле, есть некоторые сторонние пакеты сборки, поддерживающие настройку токенов github или ssh-ключей в средах:

Но после нашего обсуждения мы решили не использовать сторонние пакеты сборки по следующим причинам

  • техническое обслуживание: каждый, кто присоединяется к связанным проектам, должен знать пакет сборки и поддерживать его, если что-то изменится.
  • безопасность: мы не знаем, что произойдет, если мы не проверим код.

(Я просмотрел код, оба они довольно просты и довольно полезны. Вы можете настроить свои учетные данные в переменных среды, и пакеты сборки будут установлены для вашей цели.)

Решение без использования Сторонних пакетов сборки

Проведя некоторое исследование пакетов heroku buildpacks, мы нашли хорошее решение, которое поможет нам решить эту проблему. Чтобы узнать решение, нам нужно сначала узнать больше о том, как работает heroku python buildpack. Heroku python buildpack выполнит следующие команды по порядку:

  1. бункер/обнаружение
  2. bin/pre_compile
  3. был/скомпилирован : на этом шаге он выполнит pip install -r requirments.txt здесь.
  4. bin/post_compile
  5. бункер/выпуск

Со знанием дела, мы попробовали шаги:

  1. Переменные среды установки GITHUB_USER и |/GITHUB_PASSWORD Поместите файл
  2. bin/pre_compile с кодом генерации ссылок, например:
# !/bin/bash

echo "Generate myrepo to requirements.txt"
MY_REPO_GIT="git+https://${GITHUB_USER}:${GITHUB_PASSWORD}@github.com/my_account/myrepo.git"

echo MY_REPO_GIT >> requirements.txt

и он будет генерировать частную ссылку репо с информацией о пользователе на requirements.txt перед выполнением bin/compile . Наконец, он может установить все, что вы хотите, с помощью этого решения.

Неудачная Попытка

Мы пытались использовать setup.py сделать настройку при установке, но это не сработало, потому что команда heroku думает setup.py может делать все, и это небезопасно, если на нем отображаются все настройки среды сборки.

Мысли

Это довольно интересное путешествие, когда знаешь, как работает buildpack, и выясняешь код для меня, ха-ха. Но pre_compile кажется устаревшей функцией в heroku. Не уверен, когда он будет удален.

Рекомендации