← Artifacts / artifacts / examples
Git-клиент
Вы можете использовать стандартный Git-клиент для работы с репозиториями Artifacts. В этом примере рассматривается клонирование, но тот же подход подходит для fetch, pull, push и любой другой операции Git.
Для этого нужно:
- Получить URL удалённого репозитория через REST API
- Создайте недолговечный токен, привязанный к этому репозиторию
Когда у вас есть URL-адрес удалённого репозитория и токен, вы можете использовать их для выполнения команд Git в этом репозитории.
В этом примере предполагается, что репозиторий уже существует и у вас есть API-токен Cloudflare с Артефакты > Изменить.
Получить удалённый репозиторий и клонировать его
Замените значения-заполнители своим идентификатором учётной записи, API-токеном и именем репозитория. Скрипт получает URL-адрес удалённого репозитория через API, создаёт токен только для чтения со сроком действия один час и клонирует репозиторий в локальный каталог.
В примере ниже используется jq для извлечения полей из ответов JSON.
# Set your account details
export ACCOUNT_ID="<YOUR_ACCOUNT_ID>"
export ARTIFACTS_NAMESPACE="default"
export ARTIFACTS_REPO="starter-repo"
export CLOUDFLARE_API_TOKEN="<YOUR_API_TOKEN>"
export ARTIFACTS_BASE_URL="https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/artifacts/namespaces/$ARTIFACTS_NAMESPACE"
# Fetch the repo's remote URL
REPO_JSON=$(curl --silent "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN")
ARTIFACTS_REMOTE=$(printf '%s' "$REPO_JSON" | jq -r '.result.remote')
# Mint a short-lived read token
TOKEN_JSON=$(curl --silent "$ARTIFACTS_BASE_URL/tokens" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data "{\"repo\":\"$ARTIFACTS_REPO\",\"scope\":\"read\",\"ttl\":3600}")
ARTIFACTS_TOKEN=$(printf '%s' "$TOKEN_JSON" | jq -r '.result.plaintext')
# Clone the repo
git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-cloneТеперь у вас есть стандартная рабочая копия Git в ./artifacts-clone.
Такой подход полезен, когда обнаружение репозиториев или контроль доступа находится в другой системе, но локальные инструменты все равно ожидают обычный git remote.
Аутентификация
Обрабатывать ARTIFACTS_TOKEN как секрет. Не допускайте его попадания в логи и отдавайте предпочтение http.extraHeader чем сохранение учётных данных в URL удалённого репозитория.
Если для недолговечного workflow нужен автономный URL удалённого репозитория, извлеките секрет токена и создайте аутентифицированный удалённый репозиторий только для этой команды:
ARTIFACTS_TOKEN_SECRET="${ARTIFACTS_TOKEN%%\?expires=*}"
ARTIFACTS_AUTH_REMOTE="https://x:${ARTIFACTS_TOKEN_SECRET}@${ARTIFACTS_REMOTE#https://}"
git clone "$ARTIFACTS_AUTH_REMOTE" artifacts-clone