从 Worker 创建 Artifacts 存储库,并使用标准 Git 客户端推送和拉取内容。
在本指南结束时,您将创建一个 Worker,将其绑定(bind)到 Artifacts,通过 Workers 绑定(binding)创建一个存储库,推送一次提交,然后使用标准 Git 客户端将同一个存储库克隆回来。
首先阅读命名空间,然后选择您要使用的命名空间名称。本指南在示例中使用 default。
- 注册 Cloudflare 账户 ↗。
- 安装
Node.js↗。
Node.js 版本管理器
使用 Volta ↗ 或 nvm ↗ 等 Node 版本管理器,以避免权限问题并切换 Node.js 版本。本指南后续将介绍的 Wrangler 需要 Node 版本 16.17.0 或更高。
您还需要:
- 已安装 Wrangler。如果您在本指南中运行本地 Wrangler 命令,请先对 Wrangler 进行身份验证。关于本地 OAuth 身份验证或 CI 设置,请参阅
wrangler login和 在 CI/CD 中运行 Wrangler。 - 您的 Cloudflare 账户中拥有 Artifacts 的访问权限。
- 命名空间名称,例如
default。 - 本地
git客户端。 jq(如果您想自动提取响应字段)。
-
使用 C3 创建一个新的 Worker 项目:
npm create cloudflare@latest -- artifacts-workeryarn create cloudflare artifacts-workerpnpm create cloudflare@latest artifacts-worker进行设置时,请选择以下选项:
- 对于 What would you like to start with?,选择
Hello World example。 - 对于 Which template would you like to use?,选择
Worker only。 - 对于 Which language do you want to use?,选择
TypeScript。 - 对于 Do you want to use git for version control?,选择
Yes。 - 对于 Do you want to deploy your application?,选择
No(部署前我们还会做一些修改)。
- 对于 What would you like to start with?,选择
-
进入项目目录:
cd artifacts-worker
打开您的 Wrangler 配置文件并添加 Artifacts 绑定(binding):
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "artifacts-worker",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-08-17",
"artifacts": [
{
"binding": "ARTIFACTS",
"namespace": "default"
}
]
}name = "artifacts-worker"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-17"
[[artifacts]]
binding = "ARTIFACTS"
namespace = "default"
# 如果您希望 Wrangler 在本地开发中使用远程 Artifacts 服务,请设置 remote = true。这会在您的 Worker 内部将 Artifacts 暴露为 env.ARTIFACTS。
如果您使用的是 TypeScript,请重新生成本地绑定(binding)类型:
npx wrangler typesyarn wrangler typespnpm wrangler typesWrangler 会将 Artifacts 类型添加到您生成的 worker-configuration.d.ts file。
将 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 存储库,并返回您的 Git 客户端推送和拉取所需的远程 URL 和令牌。
对于演示,Worker 返回初始的写入令牌。在生产环境中,请为克隆(clone)和拉取(pull)流程生成短期读取令牌,并仅为需要推送(push)访问权限的操作生成写入令牌。
启动本地开发:
npx wrangler devyarn wrangler devpnpm 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:此存储库的 Git 远程 URL。<ACCOUNT_ID>将是您实际的 Cloudflare 账户 ID。token:用于 Git 操作的短期凭证。该令牌将其过期时间以 Unix 时间戳形式直接编码在?expires=后缀中。
将 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')在上一步中,您的 Worker 创建了一个空的 Artifacts 存储库。现在,您将创建一个本地 Git 存储库,添加一个文件,并将其推送到 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,请改用令牌密钥(token secret)构建一个:
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:main将同一个存储库克隆到第二个目录中:
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-clone切换回您的 Worker 项目目录:
cd artifacts-worker部署 Worker,以便您无需运行 wrangler dev 即可创建存储库:
npx wrangler deployyarn wrangler deploypnpm wrangler deployWrangler 会打印您的 workers.dev URL。对该 URL 发送相同的 curl 请求即可在生产环境中创建其他存储库。