Синхронизация репозитория Git с Google Cloud

Предположим, у меня есть репозиторий git https://github.com/jc/ и место для корзины Google gs://acme-sales/.

Есть ли способ написать программу на Python, которая обновляет изменения, внесенные в github, и синхронизирует их с облаком Google каждый раз, когда мы ее запускаем?

Я полагаю, нам нужно использовать gitpython для чтения файла по ссылке github, но как мне просто обновлять файлы в корзину Google.


person John Constantine    schedule 05.09.2018    source источник
comment
Одной из возможностей может быть установка конвейера CI/CD, который автоматически запускается фиксациями в репозитории и который просто извлекает содержимое репо и использует в качестве команды сборки скрипт-оболочку (на Python, если хотите) вокруг gsutil rsync облачная утилита SDK для синхронизации содержимого репозитория с корзиной.   -  person Dan Cornilescu    schedule 06.09.2018


Ответы (3)


Если вам не нужна немедленная синхронизация (т. е. за несколько секунд), вы можете настроить задание cron, чтобы периодически извлекать .zip архив вашего репозитория и загружать его в Google Cloud Storage.

В вашем app.yaml:

runtime: python37

В вашем cron.yaml:

cron:
- description: "sync from git repo"
  url: /tasks/sync
  schedule: every 1 minute

В вашем main.py:

from urllib.request import urlopen
from zipfile import ZipFile

from flask import Flask
from google.cloud import storage

app = Flask(__name__)

client = storage.Client(project='your-project-name')
bucket = client.get_bucket('your-bucket-name')

# Path to the archive of your repository's master branch
repo = 'https://github.com/your-username/your-repo-name/archive/master.zip'

@app.route('/tasks/sync')
def sync():
    with ZipFile(BytesIO(urlopen(repo).read())) as zipfile:
        for filename in zipfile.namelist():
            blob = storage.Blob(filename, bucket)
            blob.upload_from_string(zipfile.read(filename))

Развернуть с помощью:

$ gcloud app deploy
$ gcloud app deploy cron.yaml
person Dustin Ingram    schedule 05.09.2018

Я рекомендую вам использовать Google Cloud Build. Он позволяет синхронизировать репозиторий и использовать gsutil вы можете автоматически обновлять свое хранилище, т.е. gs://acme-sales на каждый фиксирует ваш репозиторий GitHub:

steps:
- name: gcr.io/cloud-builders/gsutil
  args: ['cp', '/workspace', 'gs://acme-sales']

Вы можете начать работу с GitHub, подключив свой репозиторий, т. е. https://github.com/jc/<repo_name> к Google Cloud Build, используя ссылка ниже:

https://github.com/apps/google-cloud-build

Автоматически создавать контейнеры или неконтейнерные артефакты при фиксации в репозитории GitHub.

person Chetabahana    schedule 04.07.2019

Добавление к предыдущему ответу [s].

Вы можете выбрать вариант "Автоматическое зеркалирование с GitHub или Bitbucket", что говорит само за себя. Или вы можете использовать "Автоматический триггер сборки". непосредственно с пользовательскими шагами сборки для выполнения определенных действий.

person A.Queue    schedule 06.09.2018