← Artifacts / artifacts / get-started
Workers
Создайте репозиторий Artifacts из Worker и используйте стандартный Git-клиент для push и pull содержимого.
К концу этого руководства вы создадите Worker, привяжете его к Artifacts, создадите репозиторий через привязку Workers, отправите коммит и клонируете тот же репозиторий обратно с помощью стандартного Git-клиента.
Начните с чтения Пространства имён, затем выберите имя пространства имён, которое будете использовать. В этом руководстве используется default в примерах.
Предварительные требования
- Зарегистрируйтесь для получения Аккаунт Cloudflare ↗.
- Установка
Node.js↗.
менеджер версий Node.js
Используйте менеджер версий Node, например Volta ↗ или nvm ↗ чтобы избежать проблем с правами доступа и переключать версии Node.js. Wrangler, о котором пойдёт речь далее в этом руководстве, требует версию Node 16.17.0 или более поздней версии.
Вам также потребуется:
- Wrangler установлен. Если вы используете локальные команды Wrangler из этого руководства, сначала выполните аутентификацию Wrangler. Для локальной OAuth-аутентификации или настройки CI обратитесь к
wrangler loginи Запуск Wrangler в CI/CD. - Доступ к Artifacts в вашем аккаунте Cloudflare.
- Имя пространства имён, например
default. - Локальный
gitклиент. jq, если нужно автоматически извлекать поля ответа.
1. Создайте проект Worker
-
Создайте новый проект Worker с помощью C3:
npm create cloudflare@latest -- artifacts-workerДля настройки выберите следующие параметры:
- Для С чего вы хотите начать?, выберите
Hello World example. - Для Какой шаблон вы хотите использовать?, выберите
Worker only. - Для Какой язык вы хотите использовать?, выберите
TypeScript. - Для Хотите использовать git для контроля версий?, выберите
Yes. - Для Хотите развернуть приложение?, выберите
No(мы внесём некоторые изменения перед развёртыванием).
- Для С чего вы хотите начать?, выберите
-
Перейдите в каталог проекта:
cd artifacts-worker
2. Добавьте привязку Artifacts
Откройте файл конфигурации Wrangler и добавьте привязку Artifacts:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "artifacts-worker",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-08-28",
"artifacts": [
{
"binding": "ARTIFACTS",
"namespace": "default"
}
]
}name = "artifacts-worker"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-28"
[[artifacts]]
binding = "ARTIFACTS"
namespace = "default"
# Set remote = true if you want Wrangler to use the remote Artifacts service in local dev.Это делает Artifacts доступным как env.ARTIFACTS внутри вашего Worker.
Если вы используете TypeScript, повторно сгенерируйте локальные типы привязок:
npx wrangler typesWrangler добавляет Artifacts тип к сгенерированному worker-configuration.d.ts файл.
3. Напишите свой Worker
Замените src/index.ts следующим кодом:
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (request.method === "POST" && url.pathname === "/repos") {
// Read the repo name from the request body so the route is reusable.
const body = await request.json().catch(() => ({}));
const repoName = body.name ?? "starter-repo";
// Create the repo and return the remote URL plus initial write token.
const created = await env.ARTIFACTS.create(repoName);
return Response.json({
name: created.name,
remote: created.remote,
token: created.token,
});
}
return new Response("Use POST /repos to create an Artifacts repo.", {
status: 405,
headers: { Allow: "POST" },
});
},
};export default {
async fetch(request, env) {
const url = new URL(request.url);
if (request.method === "POST" && url.pathname === "/repos") {
// Read the repo name from the request body so the route is reusable.
const body = await request.json().catch(() => ({}));
const repoName = body.name ?? "starter-repo";
// Create the repo and return the remote URL plus initial write token.
const created = await env.ARTIFACTS.create(repoName);
return Response.json({
name: created.name,
remote: created.remote,
token: created.token,
});
}
return new Response("Use POST /repos to create an Artifacts repo.", {
status: 405,
headers: { Allow: "POST" },
});
},
};Этот Worker создает репозиторий Artifacts и возвращает URL удаленного репозитория и токен, которые нужны вашему Git клиенту для push и pull.
В демонстрации Worker возвращает начальный токен на запись. В продакшене выпускайте недолговечные токены на чтение для операций clone и pull, а токены на запись выпускайте только для операций, которым требуется доступ push.
4. Вызовите Worker, чтобы создать репозиторий
Начните локальную разработку:
npx wrangler devЗатем откройте второй терминал и отправьте запрос вашему Worker, чтобы создать новый репозиторий Artifacts:
curl http://localhost:8787/repos \
--header "Content-Type: application/json" \
--data '{
"name": "starter-repo"
}'Ваш Worker вызовет env.ARTIFACTS.create() и возвращает три значения, необходимые для операций Git:
{
"name": "starter-repo",
"remote": "https://<ACCOUNT_ID>.artifacts.cloudflare.net/git/default/starter-repo.git",
"token": "art_v1_0123456789abcdef0123456789abcdef01234567?expires=1760000000"
}name: имя репозитория. Должно быть уникальным в пределах пространства имён.remote: URL удалённого Git репозитория для этого репозитория.<ACCOUNT_ID>будет вашим реальным ID аккаунта Cloudflare.token: краткоживущие учётные данные для Git операций. Срок действия токена закодирован непосредственно в?expires=суффикс в виде Unix timestamp.
Скопируйте remote и token значения в локальные переменные shell:
export ARTIFACTS_REMOTE="<PASTE_REMOTE_FROM_RESPONSE>"
export ARTIFACTS_TOKEN="<PASTE_TOKEN_FROM_RESPONSE>"RESPONSE=$(curl --silent http://localhost:8787/repos \
--header "Content-Type: application/json" \
--data '{"name":"starter-repo"}')
export ARTIFACTS_REMOTE=$(printf '%s' "$RESPONSE" | jq -r '.remote')
export ARTIFACTS_TOKEN=$(printf '%s' "$RESPONSE" | jq -r '.token')5. Отправьте первый коммит с помощью git
На предыдущем шаге ваш Worker создал пустой репозиторий Artifacts. Теперь вы создадите локальный Git-репозиторий, добавите файл и отправите его (push) в Artifacts, точно так же, как вы отправляли бы изменения в любой другой удалённый репозиторий Git.
mkdir artifacts-demo
cd artifacts-demo
git init -b main
printf '# Artifacts demo\n' > README.md
git add README.md
git commit -m "Initial commit"
git remote add origin "$ARTIFACTS_REMOTE"
git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" push -u origin main -c http.extraHeader флаг передаёт токен в заголовке запроса, благодаря чему он не попадает в конфигурацию Git и историю shell.
Если для кратковременной команды нужен автономный URL удалённого репозитория, соберите его из секрета токена:
export ARTIFACTS_TOKEN_SECRET="${ARTIFACTS_TOKEN%%\?expires=*}"
export ARTIFACTS_AUTH_REMOTE="https://x:${ARTIFACTS_TOKEN_SECRET}@${ARTIFACTS_REMOTE#https://}"
git push "$ARTIFACTS_AUTH_REMOTE" HEAD:main6. Загрузите репозиторий обычным Git клиентом
Клонируйте тот же репозиторий во второй каталог:
cd ..
git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-clone
git -C artifacts-clone log --oneline -1Вы должны увидеть коммит, который вы отправили на предыдущем шаге.
Также можно клонировать с помощью самодостаточного удалённого URL для кратковременной команды:
git clone "$ARTIFACTS_AUTH_REMOTE" artifacts-clone7. Развернуть Worker
Вернитесь в каталог проекта Worker:
cd artifacts-workerРазверните Worker, чтобы создавать репозитории без запуска wrangler dev:
npx wrangler deployWrangler выводит ваш workers.dev URL. Используйте тот же curl запрос к этому URL, чтобы создать дополнительные репозитории из production.