跳转到内容
搜索文档

Git 客户端

最后更新 查看 MarkdownAgent 设置

您可以使用标准的 Git 客户端与 Artifacts 仓库进行交互。此示例演示了克隆(clone)过程,但相同的方法也适用于拉取(fetch)、拉取(pull)、推送(push)以及任何其他 Git 操作。

为此,您需要:

  • 从 REST API 获取仓库的远程 URL
  • 铸造(mint)一个作用域限定在该仓库的短期令牌

一旦拥有远程 URL 和令牌,您就可以使用它们对仓库运行 Git 命令。

此示例假设该仓库已经存在,并且您拥有一个具有 Artifacts > Edit 权限的 Cloudflare API 令牌

获取远程连接并克隆仓库

将占位符值替换为您的账户 ID、API 令牌和仓库名称。该脚本从 API 获取仓库的远程 URL,铸造(mint)一个一小时后过期的只读令牌,并将仓库克隆到本地目录。

以下示例使用 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

您现在在 ./artifacts-clone 中拥有了一个标准的 Git 检出。

当另一个系统管理仓库发现或访问控制,但您的本地工具仍需要普通的 git 远程仓库时,此流程非常有用。

身份验证

请将 ARTIFACTS_TOKEN 视为机密。避免将其记录到日志中,并优先选择使用 http.extraHeader,而不是在远程 URL 中保存凭据。

如果您需要在短期工作流中使用自包含的远程 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

这篇文档对您有帮助吗?