简介
低成本的CD,可以自建gitea+drone,服务器最便宜每年要花300块(构建速度就不要太奢求了)。不过既然github现在可以建私有仓库了,又有阿里免费的构建机,这么一配合,白嫖还是挺香的。
阿里的容器镜像服务可以对接阿里自己的code、github、gitlab和Bitbucket(没听过)。
这套东西还是有一些小bug:
比如项目名称包含大写会无法触发自动构建,虽然是不值得提倡的行为,但是工单硬说是feature也是有些emm;
比如构建机偶尔会不稳定,也没有个什么探活或者通知机制,我记得8月份好像有2天这样,只能临时本机构建发版;
比如网络问题,拉包拉不动,一个demo级的项目也要5分钟,这个开发自己优化也不是不行,但是果然还是有些不爽啊(笑);
当然整体上来讲还是挺ok的,对接配置都算是挺方便的,速度也还行。
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 pull registry.cn-shanghai.aliyuncs.com/{your namespace}/ali-cr-demo:master && 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白嫖一个一年的(比较繁琐);如果你是学生,钱比较少,可以通过学生认证,在阿里云和腾讯云都有很大的优惠,在肯德基打3天工就可以买一个一年的;如果亲亲已经工作了,又不想麻烦又不想出钱的话,这边建议亲亲去睡觉喔,梦里啥都有的呢。
再次提醒:上面要求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后,阿里自动构建镜像,完成后推送消息到服务器,服务器拉取新镜像并重新部署。