之前埋了个点,我们使用每次的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
这样有个缺点,一个是需要获取代码到本地,而且有一个深坑。。。下面就聊下这个深坑。
虽然页面显示我们对应的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。