[工具][阿里镜像构建机]
简介
低成本的 CD,可以自建 Gitea + Drone,服务器最便宜每年要花 300 块(构建速度就不要太奢求了)。不过既然 GitHub 现在可以建私有仓库了,又有阿里免费的构建机,这么一配合,白嫖还是挺香的。
阿里的容器镜像服务可以对接阿里自己的 Code、GitHub、GitLab 和 Bitbucket。
这套东西还是有一些小问题:
比如项目名称包含大写会无法触发自动构建,虽然是不值得提倡的行为,但是工单硬说是 feature 也是有些无奈;
比如构建机偶尔会不稳定,也没有个什么探活或者通知机制,我记得 8 月份好像有 2 天这样,只能临时本机构建发版;
比如网络问题,拉包拉不动,一个 demo 级的项目也要 5 分钟,这个开发自己优化也不是不行,但是果然还是有些不爽;
当然整体上来讲还是挺不错的,对接配置都算是挺方便的,速度也还行。
GitHub 是通过 OAuth 授权获取项目权限的,我本来想全部做成一个包自动化来着,这里就只能手动了。
步骤
绑定代码源
登录阿里云,进入阿里云控制台,搜索容器镜像服务,第一次进入时需要手动开通,这个是免费的。找不到登录后直接点这里。这里可能会要求你设置一个密码,在拉取镜像时需要用到。
通过左边的菜单,默认实例 - 代码源,根据你要用的 Git 平台自行绑定,这里我选的是 GitHub。如下图所示:

创建命名空间
类似于 Git 的命名空间,自己的项目地址都带有自己的命名空间(GitHub 就是自己的 ID),作为和其他人区分的标识。这里最多可以创建 5 个命名空间。
点击:默认实例 - 命名空间 - 创建命名空间。这里就直接写自己的 ID,不容易冲突。
准备源仓库
这里我就简单写一个示例 demo,包括 Dockerfile 也要自己准备好的。仓库本身是可以设置为私有的,为了方便不熟悉 Docker 的同学我设置了公开。
另外 GitHub 的私有仓库免费版只支持 3 人以内的协作者,如果有更多人协作的需求,建议使用阿里自己的 Code 作为代码源。
非常重要:建议把上面 fork 来的 demo 里面,index.js 文件全局搜索 test3207,并全部替换为你自己的 ID,后续有用到。
创建镜像仓库
点击:默认实例 - 镜像仓库 - 创建镜像仓库。经过刚才的步骤,这里要填的信息都有了,自行填写。同样镜像仓库可以设置为私有。
配置构建信息
点击仓库名称或管理,进入配置页面。
点击构建 - 添加规则,这里看得懂就自己填,看不懂就照着下面填:

到这里自动构建的部分就完成了,你可以尝试修改 demo 文件,将 hello world 改成 hello 别的什么东西,再使用 Git 提交你的改动。在这个页面刷新一下,你就可以在下方构建日志里找到正在进行构建的过程了。
等构建完成后,依照基本信息的提示,在本地执行
1 | docker pull registry.cn-shanghai.aliyuncs.com/{your namespace}/ali-cr-demo:master |
就能获取到构建完成后的镜像了,你可以通过
1 | docker run --name ali-cr-demo -p 7023:4396 --restart always -d registry.cn-shanghai.aliyuncs.com/{your namespace}/ali-cr-demo:master |
来运行这个镜像,并访问本地 4396 端口看到 “Hello World”。
请注意上面两个命令中的 {your namespace} 都要替换成你自己的 namespace!
配置推送信息
配置推送信息只支持公网域名或者公网 IP,本质上就是阿里服务器向你提供的地址发起请求,因此 192.168.1.1、127.0.0.1 这类的本地 IP 是完全用不了的。如果你没有公网 IP 或者服务器,可以考虑购买云服务器:AWS 提供一年免费试用(配置过程较繁琐),学生可以通过学生认证在阿里云和腾讯云获得优惠价格。
再次提醒:上面要求 fork 来的 demo,全局替换 test3207 为你自己的 ID,虽然刚才有说。如果你不做的话,就无法继续下去了。
这个 demo 不仅作为 Hello World 的展示,也提供接收器的功能,在服务器上拉取 fork 并替换过 ID 的 demo,并通过 PM2 运行。当然 demo 里的接收方案比较粗糙,你也可以接入其他的 CD 服务,本质上这就是一个 HTTP 服务。
点击触发器 - 创建。这里名称随意写,触发器 URL 填写为:https://{ip}:7023/cr,注意这里的 IP 替换为你自己的域名或者 IP。选择 Tag 触发 - master。
到这里一个简单的 CD 流程就搭建完成了。最终的效果是,在本地做修改,git push 后,阿里自动构建镜像,完成后推送消息到服务器,服务器拉取新镜像并重新部署。
更新说明(2025):由于国内网络环境下 Docker Hub 和 GitHub Container Registry 访问受限,阿里云镜像服务提供国内 CDN 加速。GitHub 私有仓库协作者限制已放宽。