如何通过Bash脚本调用Harbor API批量创建指定列表中的项目
Harbor批量创建项目脚本修复方案
问题根因
你的脚本无法正常运行核心有两个问题:
- 项目名读取异常:
projects.txt第一行带projects:前缀,后续行存在大量前置缩进,直接read p读取到的内容包含多余字符,不符合Harbor项目名要求 - Shell变量未解析:你将请求体放在单引号内,Shell不会解析单引号内部的
$p变量,Harbor收到的请求中project_name是字面量$p,直接报错
修复后完整脚本
#!/bin/bash DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) # 替换为你自己的Harbor认证Token HARBOR_TOKEN="jhgkyyktfkghfgfhfgh=" while read -r p do # 处理项目名:去除前缀、前后空格、空行过滤 p=$(echo "$p" | sed 's/^projects: //' | xargs) [ -z "$p" ] && continue echo "正在创建项目: $p" curl --location --request POST 'https://harbor.rl.com/api/v2.0/projects' \ --header 'Content-Type: application/json' \ --header 'X-Resource-Name-In-Location: true' \ --header "Authorization: Basic $HARBOR_TOKEN" \ --data-raw '{ "project_name": "'"$p"'", "public": true, "metadata": { "public": "true", "prevent_vul": "true", "auto_scan": "true" }, "storage_limit": -1 }' # 加1秒间隔避免触发Harbor限流 sleep 1 echo -e "\n项目 $p 处理完成\n" done < "$DIR/../assets/projects.txt"
额外优化说明
- 增加了空行过滤逻辑,避免读取到空行发起无效请求
- 增加了执行日志输出,方便排查单个项目创建失败的问题
- 增加了请求间隔,避免短时间大量请求触发Harbor的限流规则
- 认证token提取为变量,后续修改更方便
内容的提问来源于stack exchange,提问作者Sayon
相关产品推荐
相关产品推荐

