Cycloid Toolkit是一个包含工具和脚本的Docker镜像,专为cycloid.io部署流水线设计。其核心用途是提供标准化的工具集,简化部署流程中的关键操作,如Ansible自动化执行、AWS资源清理、Vault认证集成及配置合并等。
该镜像集成了以下关键工具,覆盖部署流水线全生命周期需求:
| 工具名称 | 功能描述 |
|---|---|
ansible-runner | 通过堡垒机(Bastion)运行Ansible Playbook,支持动态 inventory 和Vault加密 |
aws-ami-cleaner | 清理Amazon EC2旧AMI,适用于自动扩展组(ASG)的镜像迭代场景 |
aws-ecr-cleaner | 清理Amazon ECR中旧Docker镜像,优化容器镜像仓库存储 |
vault-approle-login | 通过AppRole认证获取Vault令牌,并注入Terraform变量文件 |
extract-terraform-outputs | 提取Terraform输出,供其他脚本(如merge-stack-and-config)使用 |
merge-stack-and-config | 合并cycloid.io的stack配置与用户配置,生成最终部署配置 |
docker pull cycloid/cycloid-toolkit:latest通过堡垒机(或SSH ProxyJump)执行Ansible Playbook,支持AWS EC2动态inventory、Vault加密及角色缓存。
| 参数名 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
AWS_ACCESS_KEY_ID | AWS EC2动态inventory访问密钥 | - | 否 |
AWS_SECRET_ACCESS_KEY | AWS EC2动态inventory密钥 | - | 否 |
SSH_PRIVATE_KEY | 用于连接服务器的SSH私钥 | - | 是 |
SSH_PRIVATE_KEYS | 多个SSH私钥列表(YAML格式) | - | 否 |
BASTION_URL | 堡垒机SSH地址,格式:user@host | - | 否 |
SSH_JUMP_URL | SSH ProxyJump地址列表,格式:user1@host1,user2@host2 | - | 否 |
TAGS | 仅执行指定标签的Ansible任务 | - | 否 |
SKIP_TAGS | 跳过指定标签的Ansible任务 | - | 否 |
EXTRA_ANSIBLE_ARGS | ansible-playbook命令额外参数(如--limit) | - | 否 |
EXTRA_ANSIBLE_VARS | 额外Ansible变量(JSON格式) | - | 否 |
ANSIBLE_REMOTE_USER | Ansible远程执行用户 | admin | 否 |
ANSIBLE_GALAXY_EXTRA_ARGS | ansible-galaxy命令额外参数 | - | 否 |
ANSIBLE_VAULT_PASSWORD | Ansible Vault解密密码 | - | 否 |
ANSIBLE_FORCE_GALAXY | 是否强制更新Ansible Galaxy角色缓存 | false | 否 |
ANSIBLE_PLAYBOOK_NAME | 待执行的Playbook文件名 | site.yml | 否 |
ANSIBLE_PLAYBOOK_PATH | Playbook文件路径 | ansible-playbook | 否 |
EC2_VPC_DESTINATION_VARIABLE | EC2动态inventory目标IP类型(私有/公有) | private_ip_address | 否 |
YAML锚点定义
yamlshared: - &run-ansible-from-bastion config: platform: linux image_resource: type: docker-image source: repository: cycloid/cycloid-toolkit tag: latest run: path: /usr/bin/ansible-runner caches: # 缓存Ansible角色,加速执行 - path: ansible-playbook/roles inputs: - name: ansible-playbook # 挂载Playbook目录 path: ansible-playbook
任务引用示例
yaml- task: run-ansible <<: *run-ansible-from-bastion # 引用YAML锚点 params: BASTION_URL: ((bastion_url)) # 堡垒机地址(从变量注入) SSH_PRIVATE_KEY: ((bastion_ssh.ssh_key)) # 堡垒机SSH私钥 SSH_PRIVATE_KEYS: # 多私钥配置(可选) - ((user1_ssh.ssh_key)) - ((user2_ssh.ssh_key)) ANSIBLE_VAULT_PASSWORD: ((ansible_vault_pass)) # Vault解密密码 AWS_ACCESS_KEY_ID: ((aws_access_key)) # AWS访问密钥(用于动态inventory) AWS_SECRET_ACCESS_KEY: ((aws_secret_key)) EXTRA_ANSIBLE_ARGS: "--limit tag_role_front" # 限制执行目标 AWS_DEFAULT_REGION: eu-west-1 ANSIBLE_PLAYBOOK_NAME: ((customer)).yml # 动态指定Playbook文件名 EXTRA_ANSIBLE_VARS: # 额外Ansible变量 customer: ((customer)) project: ((project)) env: ((env)) TAGS: # 仅执行deploy标签任务 - deploy
清理指定名称模式的旧Amazon AMI,保留最新镜像,适用于频繁构建AMI的自动扩展场景。
| 参数名 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
AWS_ACCESS_KEY_ID | AWS访问密钥(需具备AMI删除权限) | - | 是 |
AWS_SECRET_ACCESS_KEY | AWS密钥 | - | 是 |
AWS_NAME_PATTERNS | AMI名称匹配模式(JSON数组格式),如["prod-front-*", "prod-back-*"] | - | 是 |
AWS_REGION | AWS区域 | - | 是 |
YAML锚点定义
yamlshared: - &aws-ami-cleaner task: aws-ami-cleaner config: platform: linux image_resource: type: docker-image source: repository: cycloid/cycloid-toolkit tag: latest run: path: /usr/bin/aws-ami-cleaner params: AWS_ACCESS_KEY_ID: ((aws_access_key)) AWS_SECRET_ACCESS_KEY: ((aws_secret_key)) AWS_REGION: eu-west-1 AWS_NAME_PATTERNS: > [ "project1_front_prod", "project1_batch_prod" ] # 清理名称匹配这两个模式的旧AMI
任务引用示例
yaml- *aws-ami-cleaner # 直接引用锚点执行清理任务
清理Amazon ECR仓库中符合条件的旧镜像,支持按标签正则过滤、保留数量配置。
| 参数名 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
AWS_ACCESS_KEY_ID | AWS访问密钥(需具备ECR管理权限) | - | 是 |
AWS_SECRET_ACCESS_KEY | AWS密钥 | - | 是 |
REGION | AWS区域 | - | 是 |
DRYRUN | 启用 dry-run 模式(仅预览不删除) | False | 否 |
IMAGES_TO_KEEP | 每个仓库保留的最新镜像数量 | 2 | 否 |
REPOSITORIES_FILTER | 仓库名称过滤(空格分隔的关键词),如"foo bar"匹配含foo或bar的仓库 | - | 否 |
IGNORE_TAGS_REGEX | 忽略的标签正则(如`"dev | staging"`不清理这些标签镜像) | - |
FILTER_TAGS_REGEX | 仅清理匹配该正则的标签(如"^dev-"仅清理dev前缀标签) | - | 否 |
YAML锚点定义
yamlshared: - &aws-ecr-cleaner task: aws-ecr-cleaner config: platform: linux image_resource: type: docker-image source: repository: cycloid/cycloid-toolkit tag: latest run: path: /usr/bin/aws-ecr-cleaner params: AWS_ACCESS_KEY_ID: ((aws_access_key)) AWS_SECRET_ACCESS_KEY: ((aws_secret_key)) REGION: ((aws_default_region)) DRYRUN: False # 生产环境设为False执行实际删除 IMAGES_TO_KEEP: 2 # 每个仓库保留最新2个镜像 REPOSITORIES_FILTER: 'foo bar' # 仅清理名称含foo或bar的仓库 IGNORE_TAGS_REGEX: 'dev|staging|prod|latest-' # 保留这些标签的镜像
任务引用示例
yaml- *aws-ecr-cleaner # 直接引用锚点执行ECR清理
通过Vault AppRole认证机制获取临时令牌,并将令牌写入文件供后续工具(如Terraform)使用。
| 参数名 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
VAULT_ROLEID | AppRole角色ID | - | 是 |
VAULT_SECRETID | AppRole密钥ID | - | 是 |
VAULT_ADDR | Vault服务地址(如[***]) | - | 否 |
YAML锚点定义
yamlshared: - &vault-approle-login task: vault-approle-login config: platform: linux image_resource: type: docker-image source: repository: cycloid/cycloid-toolkit tag: latest run: path: /usr/bin/vault-approle-login outputs: # 输出令牌文件到vault-token目录 - name: vault-token path: vault-token params: VAULT_ROLEID: ((vault.role_id)) # AppRole角色ID VAULT_SECRETID: ((vault.secret_id)) # AppRole密钥ID VAULT_ADDR: ((vault.address)) # Vault服务地址
任务引用示例
yaml- *vault-approle-login # 执行认证并输出令牌
合并cycloid.io的stack模板(基础设施代码)与用户配置(环境变量、参数等),生成最终部署配置。
| 参数名 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
CONFIG_PATH | 用户配置目录路径 | config | 否 |
STACK_PATH | stack模板目录路径 | stack | 否 |
YAML锚点定义
yamlshared: - &merge-stack-and-config platform: linux image_resource: type: docker-image source: repository: cycloid/cycloid-toolkit tag: latest run: path: /usr/bin/merge-stack-and-config outputs: # 合并结果输出到merged-stack目录 - name: merged-stack path: "merged-stack"
任务引用示例
yaml- task: merge-stack-and-config config: <<: *merge-stack-and-config # 引用锚点 inputs: # 挂载stack和config输入目录 - name: ((project))-config-ansible path: "config" # 用户配置目录 - name: ((project))-stack-ansible path: "stack" # stack模板目录 - name: ((project))-terraform-apply # 可选:挂载Terraform输出作为变量 path: "terraform"
镜像标签基于内置Ansible版本命名,格式为v<ansible-version>(如v2.4)。更新Ansible版本时需同步更新标签:
bash# 构建新标签镜像 sudo docker build . -t cycloid/cycloid-toolkit:v2.4 # 推送至仓库 sudo docker push cycloid/cycloid-toolkit:v2.4
注意:生产环境建议使用固定标签(如
v2.4)而非latest,避免版本变更导致兼容性问题。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429