#docker #github #google-cloud-platform #continuous-integration #devops
#docker #github #google-cloud-platform #непрерывная интеграция #devops
Вопрос:
Я новичок в облачных сервисах и docker.
У меня есть бот Telegram, разработанный с использованием библиотеки aiogram для Python. Я могу запустить его с помощью команды python3.8 app.py . Если ошибок не возникает, он будет работать вечно.
Кроме того, я использую простой файл sqlite3 в качестве хранилища базы данных (db.db), который мне не нужно изменять при обновлении исходного кода.
Я размещаю свой код в репозитории Github, и я хочу, чтобы GCP автоматически обновлял мою программу, когда я делаю коммит для master.
Два вопроса.
- Возможно ли автоматическое обновление исходного кода без Docker? (Я размещаю свою программу на экземпляре виртуальной машины Google Cloud Platform)
- Если это не так, как я могу удалить старый контейнер из нового, если GCP создаст новый контейнер только при совершении коммита?
Комментарии:
1. Посмотрите на сборку облака, следуйте некоторым руководствам и приступайте к работе. Вы можете запустить сборку с фиксацией в Github, и вы делаете то, что хотите в своей сборке, например, скопируйте файл в свою виртуальную машину или создайте новую виртуальную машину с новым файлом и удалите старую,… Создавать контейнер в конце не обязательно! Затем возвращайтесь со своими блокирующими вопросами!
2. Я могу порекомендовать использовать действия Github. Создайте ключ API для GCP с достаточными областями действия и добавьте его в секреты вашего репозитория Github. Затем настройте действие (есть много примеров и хорошая документация). Вам лучше использовать ветку выпуска и установить действие для запуска при фиксации, сделанной в ветке выпуска (результат при объединении, например, master в release). GCP также предоставляет документацию о том, как использовать API, чтобы делать то, что вы хотите.
3. если вы найдете какой-то ответ полезным, пожалуйста, рассмотрите возможность его принятия, спасибо!
Ответ №1:
Как упоминал @guillaume blaquiere, Google Cloud Build — хороший вариант.
Cloud Build предоставляет приложение для облачной сборки GitHub, которое позволяет вам автоматически создавать свой код каждый раз, когда вы отправляете новый коммит на GitHub.
Примите во внимание, что первые 120 минут сборки в день бесплатны; с вас будет взиматься плата за сборки, потребляемые сверх этого порога. Дополнительные сведения см. на странице «Цены«, и если вы создаете с использованием Dockerfile и сохраняете созданный образ в реестре контейнеров, с вас будет взиматься плата за хранение и сетевой выход, используемый вашими образами Docker.
Вы можете ознакомиться со следующим руководством, которое показывает, как установить приложение Google Cloud Build, и поможет вам подключить репозиторий GitHub к вашему облачному проекту и настроить непрерывную интеграцию.
Кроме того, я рекомендую взглянуть на триггеры приложений GitHub, они позволяют автоматически вызывать сборки на основе запросов Git push и pull, а также просматривать результаты сборки на GitHub и облачной консоли.
Я надеюсь, вы найдете эту информацию полезной.
Ответ №2:
Действия Github могут использоваться для запуска вашего конвейера CI / CD. Если вы беспокоитесь о минутах и хранилище, вы можете попробовать разместить свой код в Gitlab.
Что касается вашего второго вопроса. Да, вы можете управлять своими контейнерами с помощью команды gcloud в вашем процессе CI / CD. Я не смог найти прямой способ удаления старых контейнеров, но я думаю, что есть несколько способов, которые вы можете попробовать:
- Пометьте свой новый образ контейнера определенным значением, чтобы вновь созданный образ контейнера мог заменить старые изображения, что означает, что в реестре всегда будет существовать одно изображение.
- Пометьте новое изображение контейнера значением метки времени, и вы сможете удалить все изображения со старым тегом метки времени.