
!Build Status
状态:孵化中
SDCLI 是一个 Docker 镜像,作为 Atlassian 安全开发团队的命令行工具(CLI),用于仓库管理。它集成了项目创建、测试执行、CI 自动化等工具,旨在保持仓库构建流程的一致性。通过容器化方式提供统一的开发环境,确保团队成员使用相同版本的工具链,简化开发流程并提高协作效率。
SDCLI 提供以下核心功能模块,涵盖多语言项目管理、代码质量保障及仓库标准化配置:
bashsdcli go # Go 项目管理工具 dep # 安装 Go 项目依赖 lint # 执行标准 Go 代码检查 test # 运行单元测试 integration # 运行集成测试 coverage # 生成测试覆盖率报告 repo # 仓库标准化工具 all # 通用仓库工具 add-oss # 添加开源许可证及贡献指南文件 audit-contract # 验证仓库是否符合团队规范 go # Go 仓库专用工具 add-docker # 添加 Dockerfile add-layout # 生成标准项目结构 add-lint # 添加代码检查配置 add-travis # 添加 Travis CI 配置 create # 生成完整 Go 项目(基于模板) build # 启动交互式构建流程 python # Python 项目管理工具 dep # 安装 Python 项目依赖 lint # 使用 flake8 执行代码检查 test # 运行单元测试 coverage # 生成测试覆盖率报告 yaml # YAML 文件检查工具 lint # 对当前目录所有 YAML 文件执行 yamllint 检查 version # 列出 SDCLI 中安装的语言及工具版本
SDCLI 适用于 Atlassian 安全开发团队的日常开发与仓库管理,主要场景包括:
go dep)、Python(python dep)项目依赖,避免环境差异。go lint、python lint、yaml lint)、测试(go test、python test)及覆盖率分析。repo all audit-contract),确保开源合规性(repo all add-oss)。SDCLI 以 Docker 镜像形式分发,首先拉取最新版本:
bashdocker pull asecurityteam/sdcli:v1
通过 docker run 执行 SDCLI 命令,需挂载本地项目目录及 SSH 认证代理(如需 Git 操作)。以下为通用命令模板:
Linux 系统(需挂载 SSH 认证代理)
bashexport cwd=$(pwd) export project_path=${cwd#"${GOPATH}/src/"} # 提取 GOPATH 相对路径 docker run -ti \ # 挂载 SSH 认证代理(用于 Git 仓库访问) --mount src="${SSH_AUTH_SOCK}",target="/ssh-agent",type="bind" \ --env SSH_AUTH_SOCK=/ssh-agent \ # 挂载当前项目目录到容器内 GOPATH --mount src="$(pwd -L)",target="/go/src/${project_path}",type="bind" \ # 设置容器工作目录为项目路径 -w "/go/src/${project_path}" \ # 执行具体命令(示例:运行 Go 单元测试) asecurityteam/sdcli:v1 go test
Mac 系统(无需 SSH 挂载)
省略 SSH 代理挂载参数:
bashexport cwd=$(pwd) export project_path=${cwd#"${GOPATH}/src/"} docker run -ti \ --mount src="$(pwd -L)",target="/go/src/${project_path}",type="bind" \ -w "/go/src/${project_path}" \ asecurityteam/sdcli:v1 go test # 示例命令
为简化命令输入,可将以下函数添加到 .bashrc 或 .bash_profile,自动处理路径与挂载:
bashsdcli() { local cwd local gopath cwd="$(pwd)" gopath="${GOPATH:-~/go}" # 默认 GOPATH 为 ~/go(如未显式设置) # 提取项目在 GOPATH 中的相对路径 local project_path=${cwd#"${gopath}/src/"} docker run -ti --rm \ # Linux 需保留以下两行,Mac 需删除 --mount src="${SSH_AUTH_SOCK}",target="/ssh-agent",type="bind" \ --env "SSH_AUTH_SOCK=/ssh-agent" \ # 挂载项目目录并设置工作目录 --mount src="$(pwd -L)",target="/go/src/${project_path}",type="bind" \ -w "/go/src/${project_path}" \ asecurityteam/sdcli:v1 "$@" # 传递用户输入的命令参数 }
配置后即可直接通过 sdcli <命令> 调用,例如:
bashsdcli go lint # 执行 Go 代码检查 sdcli python dep # 安装 Python 依赖 sdcli yaml lint # 检查 YAML 文件
fish Shell 函数定义
创建 ~/.config/fish/functions/sdcli.fish(权限设为 755):
bashfunction sdcli set cwd (pwd) set gopath "$GOPATH" if test -z "$gopath" set gopath ~/go # 默认 GOPATH end set project_path (string replace "$gopath/src/" "" $cwd) # 提取相对路径 docker run --rm \ --mount src="$cwd",target="/go/src/$project_path",type="bind" \ -w "/go/src/$project_path" \ asecurityteam/sdcli:v1 $argv end
解决交互式命令问题
非 bash Shell(如 fish)可能因 TTY 配置导致交互式命令失败(如提示“no TTY for interactive shell”)。可通过以下两种方式解决:
bashsdcli repo go create -- project_name="myproject" project_description="描述" --no-input
bashdocker run -it \ --entrypoint "/bin/bash" \ --mount src="$cwd",target="/go/src/$project_path",type="bind" \ -w "/go/src/$project_path" \ asecurityteam/sdcli:v1 # 容器内执行命令 /usr/bin/sdcli go test
SDCLI 基于 cookiecutter 模板生成项目,支持交互式(默认)和非交互式两种模式。推荐非交互式模式以简化输入:
bashsdcli repo go create -- \ project_name="我的项目" \ project_description="这是一个基于 SDCLI 生成的 Go 项目" \ --no-input # 禁用交互提示,直接使用参数生成
省略 --no-input 及参数,通过终端提示输入项目信息:
bashsdcli repo go create # 按提示输入 project_name、project_description 等
SDCLI 支持通过添加可执行文件扩展命令。命令命名规则为:子命令通过下划线连接,例如 sdcli my feature 会调用容器内 /commands/sdcli_my_feature 可执行文件。
./commands 目录中创建可执行文件,命名格式为 sdcli_<子命令1>_<子命令2>...(如 sdcli_demo_cmd)。chmod +x)。sdcli demo cmd 调用。| 参数/环境变量 | 作用 | 示例值 |
|---|---|---|
SSH_AUTH_SOCK | SSH 认证代理路径,用于容器内 Git 操作 | /run/user/1000/keyring/ssh |
GOPATH | Go 项目路径,用于计算容器内挂载路径 | ~/go |
project_path | 项目在 GOPATH 中的相对路径 | github.com/asecurityteam/myproj |
--mount | 挂载本地目录/文件到容器 | src="$(pwd)",target="/go/src/...",type="bind" |
-w/--workdir | 设置容器工作目录 | /go/src/github.com/asecurityteam/myproj |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务