mithomedia/ci-tools是一个轻量级的构建工具集合,旨在帮助编写CI/CD流水线,特别适用于Drone CI环境。该镜像基于php:8.1-alpine构建,包含多种预安装的常用工具和自定义命令,可简化代码构建、部署、缓存管理等CI/CD流程中的常见任务。
php:8.1-alpine镜像,提供轻量级基础环境在基础镜像上额外安装了以下可执行程序:
ack(替代busybox中缺失的grep -P功能)bashcurlgitjqsshopensslrsyncvimzip集成了多个主流开发工具:
box:来自https://github.com/box-project/box%E7%9A%84PHP%E5%BD%92%E6%A1%A3%E5%B7%A5%E5%85%B7cachetool:来自https://github.com/gordalina/cachetool%E7%9A%84%E7%BC%93%E5%AD%98%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7composer:来自https://github.com/composer/composer%E7%9A%84PHP%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7mustache:来自https://github.com/cbroglie/mustache%E7%9A%84Go%E8%AF%AD%E8%A8%80Mustache%E6%A8%A1%E6%9D%BF%E5%BC%95%E6%93%8Esw:来自https://github.com/shopwareLabs/sw-cli-tools%E7%9A%84Shopware CLI工具symfony:来自https://github.com/symfony/cli%E7%9A%84Symfony CLI工具wp:来自https://github.com/wp-cli/wp-cli%E7%9A%84WordPress CLI工具提供多个专为CI流程设计的自定义命令,如:
build-info:提取构建信息并以JSON格式输出changes:列出上次标签后的所有提交deploy-name:生成可排序的部署目录名deploy-via-tar:通过tar工具部署文件到远程主机extract-tag:处理标签名,移除不需要的前缀git-export:从版本控制中导出当前修订版内容ioncube-encode:通过外部服务编码PHP文件roll-files:保留指定数量的最新目录,删除旧目录switch-link:更新远程主机上的符号链接deploy-via-tar、switch-link等命令实现自动化部署流程可通过Drone风格的设置或对应的环境变量进行配置:
| 设置项 | 环境变量 | 说明 |
|---|---|---|
git_force_https | $PLUGIN_GIT_FORCE_HTTPS | 强制使用HTTPS URL访问所有仓库(针对主仓库主机名和git@风格的URL) |
ssh_key | $PLUGIN_SSH_KEY | 用作默认SSH身份的私钥内容 |
ssh_strict_keys | $PLUGIN_SSH_STRICT_KEYS | 设置StrictHostKeyChecking的默认值,可选yes或no |
Docker运行命令
运行镜像并进入交互式shell:
bashdocker run -it --rm mithomedia/ci-tools sh
执行特定命令(如查看composer版本):
bashdocker run --rm mithomedia/ci-tools composer --version
Drone CI配置示例
在Drone CI中使用该镜像作为步骤:
yamlsteps: - name: build image: mithomedia/ci-tools commands: - composer install - symfony console cache:clear - build-info --drone > build-info.json
ioncube-encode命令
使用外部ioncube编码服务编码PHP文件:
yamlsteps: - name: encode-php image: mithomedia/ci-tools settings: ioncube_url: https://ioncube.example.com/encode commands: - ioncube-encode src/app.php dist/app-encoded.php
如果不使用Drone,可通过环境变量设置:
bashdocker run -e PLUGIN_IONCUBE_URL=https://ioncube.example.com/encode --rm mithomedia/ci-tools ioncube-encode src/app.php dist/app-encoded.php
deploy-via-tar命令
部署文件到远程主机:
bashdocker run -e SSH_KEY="$(cat ~/.ssh/id_rsa)" --rm mithomedia/ci-tools deploy-via-tar user@example.com:/var/www deploy-20231001 file-list.txt
roll-files命令
保留远程主机上最新的10个以"deploy-"为前缀的目录:
bashdocker run -e SSH_KEY="$(cat ~/.ssh/id_rsa)" --rm mithomedia/ci-tools roll-files user@example.com:/var/www deploy- 10
dockerfileFROM php:8.1-alpine COPY bin/* /usr/local/bin/ COPY README.md entrypoint.sh / RUN chmod +x /entrypoint.sh # 包含一些调试便利工具 :sweat_smile: # ack替代缺失的grep -P RUN apk add --no-cache ack bash bash-completion ca-certificates curl git gzip jq nano ncurses tar openssh-client-default openssl rsync zip \ && clear-caches RUN curl -sL https://github.com/cbroglie/mustache/releases/download/v1.2.0/mustache_1.2.0_linux_amd64.tar.gz \ | tar -xz mustache \ && install -t /usr/local/bin mustache \ && rm mustache RUN mkdir -p install \ && curl -sL https://github.com/box-project/box/releases/download/4.2.0/box.phar > install/box \ && curl -sL https://github.com/gordalina/cachetool/releases/download/8.5.0/cachetool.phar > install/cachetool \ && curl -sL https://github.com/gordalina/cachetool/releases/download/5.1.3/cachetool.phar > install/cachetool5 \ && curl -sL https://github.com/composer/composer/releases/download/2.5.1/composer.phar > install/composer \ && curl -sL https://github.com/shopwareLabs/sw-cli-tools/releases/download/0.4.3/sw.phar > install/sw \ && curl -sL https://github.com/symfony-cli/symfony-cli/releases/download/v5.4.20/symfony-cli_linux_amd64.tar.gz | tar -xz \ && mv symfony install/ \ && curl -sL https://github.com/wp-cli/wp-cli/releases/download/v2.7.1/wp-cli-2.7.1.phar > install/wp \ && chmod +x install/* \ && cp install/* /usr/local/bin \ && rm -r install ENTRYPOINT ["/entrypoint.sh"]
本镜像中用于构建的便捷脚本可在镜像内查看,并根据以下MIT许可证条款发布。
版权所有 2023 mitho®
特此授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人免费许可,不受限制地处理本软件,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售软件副本的权利,并允许向其提供软件的人这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的担保,包括但不限于对适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对因软件或软件的使用或其他交易引起的任何索赔、损害或其他责任承担责任,无论是合同诉讼、侵权诉讼还是其他形式的诉讼。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。




探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 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 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务