ZzackzhangK零SK壹S
- 已编辑
本文的目的是提供一种快速验证代码的方式。开发人员只需要关注 开发代码、Push代码、更新镜像三步即可快速将代码发布至自己的测试环境。无需执行 docker build
、docker push
,解决国内开发人员头痛的拉包、打包、Push包过程。极大加快开发过程,提升开发效率。
背景
开发人员在开发时,一般的开发方法是:将代码fork 至自己的仓库,本地开发完成后,需要先执行docker build 将代码打包成一个测试镜像,push到自己的dockerhub上面,去自己的开发环境更新Deployment镜像。然后验证代码。
由于国内网络环境的特殊性,在docker build
、 docker push
时经常会出现失败的情况。如果能加速该过程,可以极大提高开发效率。
方法
使用Github Action
来快速将自己的代码Push到自己的Dockerhub仓库,自动完成CI过程。
开发人员在开发完代码后,只需要Push代码到自己的仓库后,等待CI自动完成,然后去开发环境更新镜像,即可快速验证自己代码。
开发准备
以ks-installer仓库为例,其余仓库类似。
- 首先将代码fork至自己仓库
- 下载代码到本地
git clone https://github.com/zackzhangkai/ks-installer
- 增加上游仓库地址
git remote add upstream https://github.com/kubesphere/ks-installer.git
现在你的本地情况如下:
$ git remote -v
origin https://github.com/zackzhangkai/ks-installer.git (fetch)
origin https://github.com/zackzhangkai/ks-installer.git (push)
upstream https://github.com/kubesphere/ks-installer.git (fetch)
upstream https://github.com/kubesphere/ks-installer.git (push)
过程
比如,你现在要修改一个fix
先切换到一个新的分支
git checkout -b fix-test upstream/master
然后提交你的修改
git commit -a -m "some fix" -s
此时会产生一个commitID,如:e9b1a25eaf0ce403c6493cb0ae7dc2d12809980a
传统的开发步骤:此时会直接docker build && docker push至自己仓库。
下面的步骤是省去上面一步,让Github Action帮助我们完成该步骤,由于执行构建环境使用Azure,速度很快,只需1分钟左右。
分析
首先我们看下官方Github Actions的yaml配置文件
通过上面的yaml我们知道,官方仓库定义的是将有代码push 到 master 分支时,会自动打包构建,推送到kubespheredev 仓库。因此我们需要将仓库名称改为自己的镜像仓库地址
- 首先我们新建一个分支,用于构建
git checkout -b master-build origin/master
- 然后我们修改相应配置
IMAGE_REPO: zackzhangkai
修改为自己的docker的用户名/密码
在Github上传入两个变量
添加变量
- 提交代码
$ git diff
diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
index 283395f..67f5256 100644
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -9,7 +9,7 @@ on:
env:
# TODO: Change variable to your image's name.
IMAGE_NAME: ks-installer
- IMAGE_REPO: kubespheredev
+ IMAGE_REPO: zackzhangkai
IMAGE_VERSION: latest
$ git commit -m "docker build and push to zackzhangkai repo" -s
现在这个分支的代码已经是自己的CI的信息。
- 我们将刚才fix的代码cherry-pick过来,然后推到自己仓库的master分支,就可以自动完成CI过程。
$ git cherry-pick e9b1a25eaf0ce403c6493cb0ae7dc2d12809980a
$ git push origin HEAD:master
看页面,已经开始执行CI过程
整个过程只花了不到一分钟,且已经推到dockerhub仓库
此时我们已经实现了自动CI过程,然后去对应的开发环境,替换镜像即可。
等待我们的测试没有问题,我们切换到刚才的分支,然后提交到代码后,执行正常提pr的流程即可。