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

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

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

方法1:

打开项目CI/CD -> piplines,点击对应的
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第1张图片

当然,如果找tag对应的commit id,点击这里
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第2张图片

最后,点击copy按钮即可复制到粘贴板
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第3张图片

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

方法2:

打开本地项目目录

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

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

一般楼主喜欢在页面上直接生成项目的tag,然而在页面生成tag后再pull到本地,发现...发现
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第4张图片
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第5张图片

虽然页面显示我们对应的commit id是dd033b25(简短版),但是实际我们pull下的tag确显示此分支对应46ca。但是本地tag的分支,push上去在pull下来(新项目)就没有问题,楼主已验证过。

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

方法3:

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

gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第6张图片

2)选择Access Tokens创建一条token,我们只需要给它api的阅读权限就好了
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第7张图片

3)查看项目id
选择目标项目的setting-general,展开General project settings.
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第8张图片

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,返回示例如下:

gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第9张图片

因为是GET请求,也可以直接浏览器访问。
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第10张图片

还记得刚才方法二的坑不,在这个方法是不存在的,经楼主验证,如果通过页面生成的tag,我们使用 $ git rev-parse v1.0.0获取到的是target的值,而commit的id是和我们镜像id一致的。
gitlab与docker的集成(续的续)gitlab与k8s集成(续)_第11张图片

所以,我们 使用curl命令获取到相应tag的数据后,解析commit的id即可获取到相应镜像的tag。后续的脚本,暂时停止研究,应该没太大技术问题。

结尾

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

参考资料

  • - GoddyWu
  • gitlab - api - tags

你可能感兴趣的:(gitlab与docker的集成(续的续)gitlab与k8s集成(续))