美文网首页git的使用技巧
gitlab与docker的集成(续的续)gitlab与k8s集

gitlab与docker的集成(续的续)gitlab与k8s集

作者: GoddyWu | 来源:发表于2018-06-29 14:45 被阅读137次

    之前埋了个点,我们使用每次的commit id即安全散列算法生成的16位唯一id作为镜像的标签。(英语:Secure Hash Algorithm,缩写为SHA)这么做的目的是方便获取每次的版本号便于持续集成
    我们公司的场景是希望正式版每次同步只需要$ release relase_v1.0.0类似一条命令就可以发布多个项目同时标有v1.0.0的标签的镜像,现在我们需要知道如何获取相应tag的镜像版本号(现与git commit id一致)

    目前展示楼主调研的几种方法。

    方法1:

    打开项目CI/CD -> piplines,点击对应的
    当然,如果找tag对应的commit id,点击这里
    最后,点击copy按钮即可复制到粘贴板📋

    这种方法需要人工来做,比较不方便。

    方法2:

    打开本地项目目录

    $ git rev-parse v1.0.0
    #返回示例
    208a07116a50f9c2f1956afab52808ed525ba108
    

    这样有个缺点,一个是需要获取代码到本地,而且有一个深坑。。。下面就聊下这个深坑。

    一般楼主喜欢在页面上直接生成项目的tag,然而在页面生成tag后再pull到本地,发现...发现
    虽然页面显示我们对应的commit id是dd033b25(简短版),但是实际我们pull下的tag确显示此分支对应46ca。但是本地tag的分支,push上去在pull下来(新项目)就没有问题,楼主已验证过。

    所以此方式,我们只能通过本地生成并提交tag

    方法3:

    需要我们了解gitlab的api,此部分使用的是https://docs.gitlab.com/ee/api/tags.html
    操作步骤如下:
    1)点击头像->settings


    2)选择Access Tokens创建一条token,我们只需要给它api的阅读权限就好了
    3)查看项目id
    选择目标项目的setting-general,展开General project settings.

    4)命令行查询
    curl --header "PRIVATE-TOKEN: ***" "https://gitlab.com/api/v4/projects/7259927/repository/tags/v1.0.2" | python -m json.tool
    

    注意尾缀的| python -m json.tool是非必要的,只是方便看json,返回示例如下:


    因为是GET请求,也可以直接浏览器访问。
    还记得刚才方法二的坑不,在这个方法是不存在的,经楼主验证,如果通过页面生成的tag,我们使用$ git rev-parse v1.0.0获取到的是target的值,而commit的id是和我们镜像id一致的。
    所以,我们使用curl命令获取到相应tag的数据后,解析commit的id即可获取到相应镜像的tag。后续的脚本,暂时停止研究,应该没太大技术问题。

    结尾

    到现在,最方便使用第三种,使用curl命令获取到数据,然后解析出commit id,也就意味着我们获取到了相应tag对应的docker镜像id。

    参考资料

    相关文章

      网友评论

      • SetZero:楼主的意思是使用sha作为镜像的tag吗
        GoddyWu:https://www.jianshu.com/p/58cd7fe13d9d 主要目的是为了这个博客里的,能自动k8s部署

        = - = 还是觉得这种方法不够优雅,但是大哥交给的调研任务这样也算能交差
        GoddyWu:是的啊。。试了下可行。目的是去除掉手工修改k8s的yml部署文件的image tag。

        我觉得不是CD最优解,但是我们公司只用gitlab的情况下这至少是个可实现的方法。

      本文标题:gitlab与docker的集成(续的续)gitlab与k8s集

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