美文网首页藏兵谷前端自动化构建
git push还能这样用?介绍一款基于git命令完成构建部署的

git push还能这样用?介绍一款基于git命令完成构建部署的

作者: DevOps亮哥 | 来源:发表于2019-12-14 08:12 被阅读0次

    一、介绍

    Gitkube 是一款用GO语言编写的、能够使用git push直接构建和部署Docker镜像到Kubernetes集群的工具。只需要简单的初始化设置,用户就可以使用git push自动化的构建和部署Kubernetes集群上。Gitkube与Draft、Skaffold不同的是,Gitkube不提供命令行工具,只需要使用git push命令即可,在如今Git版本控制系统一统天下的年代,只要会用git 命令就会使用Gitkube,大大降低了开发人员的学习成本。

    二、特性

    Gitkube具有以下特性:

    1、除了服务器上的原生工具,如:git、kubectl之外,不需要安装其他依赖

    2、安装简单,即插即用的安装方式

    3、具备基于简单公钥(Simple Public Key)的身份验证

    4、使用RBAC实现对Git 远程的访问控制

    5、支持基于命名空间(Namespace)的多租户,远程只能部署到自己的命名空间

    6、对代码仓库的存储库结构没有要求

    三、使用场景

    任何一个工具都会有具体的使用场景,任何一个工具也都不可能覆盖所有的场景。Gitkube的使用场景与其他本地开发调试工具是一样的,都是为了能够快速验证本地开发代码的正确性。最主要的一点是,Gitkube是基于Git命令的工具,只要会使用基本的git 命令,就能使用Gitkube。使用场景比如:

    1、WIP(Work In Process)开发中的分支推送到Kubernetes集群进行测试

    2、打算在服务器上编写基于Git的自动化的参考实现。可以Fork这个代码库并创建自己的CRD+Controller+Git远程钩子,它可以在Kubernetes集群上执行任务。(CRD的意思是CustomResourceDefinition,是v1.7+新增的无需改变代码就可以扩展Kubernetes API的机制。)

    四、架构图

    下面是Gitkube的整体架构图,比较简单。主要包含以下三个组件:

    1、Remote:由K8s CRD定义的Custom Resource,主要包含了用于构建镜像所需的基本信息,比如授权,镜像地址和代码库路径。

    2、gitkube-controller:用于管理Remote对象并将变更提交给gitkube的控制器。

    3、gitkubed:用于从代码库构建Docker镜像并进行部署的gitkubed服务。

    需要在K8s 集群中安装一些组件,开发人员本地环境不需要安装任何工具。

    五、安装

    安装Gitkube有以下两种方式:

    1、使用kubectl安装

    kubectl create -f https://storage.googleapis.com/gitkube/gitkube-setup-stable.yaml

    #expose gitkubed service

    kubectl --namespace kube-system expose deployment gitkubed --type=LoadBalancer --name=gitkubed

    使用提供的YAML文件能够直接创建gitkube的资源

    2、使用gitkube CLI安装

    这种安装方式是将gitkube安装到本地机器上,可以在命令行上执行gitkube命令。gitkube客户端可以安装到不同在不同的操作系统上。

    Linux/MacOS

    $curl https://raw.githubusercontent.com/hasura/gitkube/master/gimme.sh | bash

    Windows

    $scoop install gitkube

    使用gitkube install安装Gitkube到K8s集群中(建议使用这种安装方式,后面在创建、安装Remote对象时会用到)

    $gitkube install

    到此gitkube和gitkube-controller安装到K8s集群中了

    六、工作流程

    使用gitkube进行本地开发的流程,主要包含四个阶段:

    1、本地开发阶段

    开发人员在本地代码库中进行开发,本地代码库需要包含Dockerfile和K8s部署配置文件。

    下载并解压gitkube-example代码库

    $ wget https://github.com/hasura/gitkube-example/archive/master.zip

    $ unzip master.zip

    $ mv gitkube-example-master gitkube-examples

    $cd gitkube-example/mono-example

    $ git init

    2、设置Remote

    进入代码库的根目录下创建Remote对象,一个Remote资源包含三部分:

    ①、authorizedKey:用于授权git push的ssh-keys列表,也就是ssh的公钥。

    ②、registry:镜像构建之后推送的镜像仓库地址。

    ③、deployments:用于构建docker镜像以及升级K8s deployment所需的信息。

    创建ssh key 用于通过ssh协议执行git push命令,生成的公钥也会添加到remote.yaml文件中。

    $ ssh-keygen -t rsa

    创建myremote.yaml文件,gitkube提供了命令行辅助功能,通过输入一些必填项的值创建Remote文件。

    $ gitkube remote generate -f myremote.yaml

    > Remote name: myremote

    > Namespace: default

    > Public key file: /root/.ssh/id_rsa.pub

    > Initialisation:   

         > K8s Yaml Manifests    --------------------   

         > Helm Chart   

         > None

    > Manifests/Chart directory: manifests

    > Choose docker registry:   

    > docker.io/xinglongjian    ---------------------   

    > Specify a different registry   

    > Skip for now> Deployment name: www

    > Container name: www

    > Dockerfile path: microservices/nginx/Dockerfile

    > Build context path: microservice/nginx

    > Add another container? N

    > Add another deployment? N

    3、安装Remote资源

    使用上面生成的myremote.yaml文件,将Remote对象安装到K8s集群中,并提供了remote url 。(备注:在minikube中创建Remote对象时,总是不能生成remote url)

    $ gitkube remotecreate-f myremote.yaml

    INFO[0000] remote myremote created

    INFO[0000] waitingforremoteurl

    INFO[0000] remoteurl: ssh://default-myremote@219815023.us-west-2.elb.amazonaws.com/~/git/default-myremote

    4、推送部署

    当安装好Remote资源后,找到Remote里的remote url的值,然后在当前代码库中使用git remote add设置remote URL,使用git push 即可推送到指定的remote对象上。

    # add the remote to your git repo and push:

    gitremote add myremote ssh://default-myremote@219815023.us-west-2.elb.amazonaws.com/~/git/default-myremote 

    git push myremote master

    下面是官方提供的一个演示动画可供参考。

    七、总结

    Git大家已经非常熟悉了,是如今用的最多的分布式版本控制工具,开发人员在写完代码提交到Git版本控制库时,都会使用Git命令。在云原生时代,如果也能利用Git的命令完成代码库镜像的构建、推送和部署流程,不需要学习和了解新的工具,新的命令,降低了学习的成本,还提升了本地开发的效率,一举两得。

    Gitkube的设计理念非常好,利用了git的优势完成容器镜像的构建和部署工作,但目前Gitkube代码库的贡献者在Github上并不活跃,2019年到目前为止,仅提交过3次Commit,Gitkube在使用过程中会有很多不完善的地方,广大网友在企业内部使用时慎重,该文章只用作调用学习使用,希望能为后面的创新者提供一个好的思路,也希望Gitkube社区能活跃起来继续完善Gitkube的功能。

    DevOps一直都在强调提高效率,只有让一切人工参与的步骤自动化,让没有工具支撑的工作工具化,才能提高开发人员的开发效率。从代码开发到代码部署到测试环境,这个CICD的过程是最容易利用工具自动化的方式提高效率的,而且这个阶段的工具也非常多,基于Docker容器、Kubernetes容器编排的生态下,云原生下的CICD会更加的百花齐放。

    ====欢迎加入DevOps亮哥公众号====

    相关文章

      网友评论

        本文标题:git push还能这样用?介绍一款基于git命令完成构建部署的

        本文链接:https://www.haomeiwen.com/subject/cbqcnctx.html