• 精华帖开发
  • 手把手教你使用Github Action自动完成CI过程,快速开发KubeSphere

本文的目的是提供一种快速验证代码的方式。开发人员只需要关注 开发代码Push代码更新镜像三步即可快速将代码发布至自己的测试环境。无需执行 docker builddocker push,解决国内开发人员头痛的拉包、打包、Push包过程。极大加快开发过程,提升开发效率。

背景

开发人员在开发时,一般的开发方法是:将代码fork 至自己的仓库,本地开发完成后,需要先执行docker build 将代码打包成一个测试镜像,push到自己的dockerhub上面,去自己的开发环境更新Deployment镜像。然后验证代码。

由于国内网络环境的特殊性,在docker builddocker push时经常会出现失败的情况。如果能加速该过程,可以极大提高开发效率。

方法

使用Github Action来快速将自己的代码Push到自己的Dockerhub仓库,自动完成CI过程。

开发人员在开发完代码后,只需要Push代码到自己的仓库后,等待CI自动完成,然后去开发环境更新镜像,即可快速验证自己代码。

开发准备

ks-installer仓库为例,其余仓库类似。

  1. 首先将代码fork至自己仓库

  1. 下载代码到本地
git clone https://github.com/zackzhangkai/ks-installer
  1. 增加上游仓库地址
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 仓库。因此我们需要将仓库名称改为自己的镜像仓库地址

  1. 首先我们新建一个分支,用于构建
git checkout -b master-build origin/master
  1. 然后我们修改相应配置
  IMAGE_REPO: zackzhangkai

修改为自己的docker的用户名/密码

在Github上传入两个变量

添加变量

  1. 提交代码
$ 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的信息。

  1. 我们将刚才fix的代码cherry-pick过来,然后推到自己仓库的master分支,就可以自动完成CI过程。
$ git cherry-pick e9b1a25eaf0ce403c6493cb0ae7dc2d12809980a
$ git push origin HEAD:master

看页面,已经开始执行CI过程

整个过程只花了不到一分钟,且已经推到dockerhub仓库

此时我们已经实现了自动CI过程,然后去对应的开发环境,替换镜像即可。

等待我们的测试没有问题,我们切换到刚才的分支,然后提交到代码后,执行正常提pr的流程即可。