首页 > 数据库 > 数据库开发技术 > 极狐GitLab SaaS 内测轻度体验
感谢极狐团队为 GitLab(SaaS)[1]本地化的努力,同时也感谢小马哥提供的内测资格。
最近突然想到了个点子,需要使用一个私有的镜像仓库。极狐GitLab 有提供容器镜像库,正好和 CICD 一起做个轻度体验。
文档介绍在这里[2],目前还是英文。(应该本地化的工作量很大,文档还没翻译。)
容器镜像库可以作为独立镜像仓库使用(为什么要这么用,卖个关子下篇文章见),就是使用 docker 命令将构建好的镜像推送到 容器镜像库。
当然也可以同 CICD 流水线结合使用,后文也会介绍。
本地登录 Container Registry 有两种验证方式:
•使用用户名和密码•开启了双重身份验证[3],可以使用访问个人访问令牌[4]
其实,不管是否开始双重验证,都建议使用访问令牌。
docker login registry.gitlab.cn#根据提示输入用户名和密码或者令牌
image 的名字最多有三层[5],即 registry.example.com/[namespace] 之后的内容最多有 3 层。比如下面的 image 名字 myproject/my/image
registry.example.com/mynamespace/myproject/my/image:rc1其次 image 名字的第一层必须是镜像名,如上面的 myproject。
尝试将 tekton 的镜像推送上去:
docker tag gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.28.1 registry.gitlab.cn/addozhang/registry-mirror/tekton-pipeline/controller:v0.28.1docker push registry.gitlab.cn/addozhang/registry-mirror/tekton-pipeline/controller:v0.28.1
请忽略发布时间,原镜像的 Created 字段就有问题。
同样可以使用 REST API 进行访问:
curl --location --request GET 'https://gitlab.cn/api/v4/projects/addozhang%2Fregistry-mirror/registry/repositories/155/tags' \--header 'PRIVATE-TOKEN: TOKEN_HERE'[{"name":"v0.28.1","path":"addozhang/registry-mirror/tekton-pipeline/controller:v0.28.1","location":"registry.gitlab.cn/addozhang/registry-mirror/tekton-pipeline/controller:v0.28.1"}]
见下文。
我将之前 github 的使用的测试 tekton 的项目镜像到了这里[6],并添加了一个 .gitlab-ci.yml 的流水线定义文件[7]。
有了官方的文档[8],以及参考官方提供各种的模板[9],流水线的定义上手很快。
整个流水线包含了两个 stage:Java 代码的编译打包和镜像的构建。
如上图,最新的一次使用了 cache 功能[10]将 .m2/repository 缓存;而前两次使用了缓存(这里的构建耗时差异很大,不知道是不是因为晚上资源比较少?)。Java 项目会将依赖包保存在本地库中,使用 cache 功能可以提升构建的效率。
使用 needs 可以控制同 stage 下作业的构建顺序,否则同 stage 下作业的执行是并行的。同时有了 needs 还可以构建出 DAG,前提是最少需要 3 个作业,因此我又加了一个作业。
cache:paths:- .m2/repositoryvariables:MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"stages:- build- image- post-buildmaven-build:image: maven:3-jdk-8stage: buildartifacts:paths:- target/*.jarscript:- mvn install -DskipTestsdocker-build:image: docker:19.03.12stage: imageneeds:- maven-builddependencies:- maven-buildservices:- docker:19.03.12-dindvariables:IMAGE_TAG: $CI_REGISTRY_IMAGE:latestscript:- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY- docker build -t $IMAGE_TAG .- docker push $IMAGE_TAGdone:image: busybox:lateststage: post-buildneeds:- docker-buildscript:- echo "All Done!"
感觉图有点简陋,后期应该会优化。
前面的流水线定义中,为了传递 maven 构建的 jar,使用了 artifacts 和 dependencies 进行了传递。
难道是我理解错了?鼠标悬停并没有显示做依赖的作业。
除了 push 代码触发,还可以创建触发器通过 Web API 进行触发。
curl -X POST \-F token=TOKEN_HERE \-F ref=main \https://gitlab.cn/api/v4/projects/9766/trigger/pipeline{"id":19252,"project_id":9766,"sha":"5dde144d584b76fe6d3b63a4a9beb789762d1a2d","ref":"main","status":"created","created_at":"2021-10-01T07:37:42.806+08:00","updated_at":"2021-10-01T07:37:42.806+08:00","web_url":"https://gitlab.cn/addozhang/tekton-test/-/pipelines/19252","before_sha":"0000000000000000000000000000000000000000","tag":false,"yaml_errors":null,"user":{"id":432,"name":"addozhang","username":"addozhang","state":"active","avatar_url":null,"web_url":"https://gitlab.cn/addozhang"},"started_at":null,"finished_at":null,"committed_at":null,"duration":null,"queued_duration":null,"coverage":null,"detailed_status":{"icon":"status_created","text":"created","label":"created","group":"created","tooltip":"created","has_details":true,"details_path":"/addozhang/tekton-test/-/pipelines/19252","illustration":null,"favicon":"/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png"}}
由于之前任职的公司内部也有用 Gitlab,也有过 Github Action 和 Tektoncd 的使用经验,所以体验下来并还没有任何阻碍。这也得益于文档的完善,以及极狐团队的努力,希望极狐可以做得更好。
文中使用 registry-mirror 做了仓库名,大家也能猜到点什么,敬请关注一下篇。
[1] GitLab(SaaS): https://gitlab.cn/[2] 这里: https://gitlab.cn/help/user/packages/container_registry/index[3] 双重身份验证: https://gitlab.cn/help/user/profile/account/two_factor_authentication[4] 个人访问令牌: https://gitlab.cn/help/user/profile/personal_access_tokens[5] 最多有三层: https://docs.gitlab.com/ee/user/packages/container_registry/#image-naming-convention[6] 这里: https://gitlab.cn/addozhang/tekton-test[7] 流水线定义文件: https://gitlab.cn/addozhang/tekton-test/-/blob/main/.gitlab-ci.yml[8] 官方的文档: https://gitlab.cn/help/ci/yaml/index.md[9] 官方提供各种的模板: https://gitlab.com/gitlab-org/gitlab-foss/-/tree/master/lib/gitlab/ci/templates[10] cache 功能: https://gitlab.cn/help/ci/yaml/index.md%23cache
原文作者:云原生指北;如有侵权,请联系管理员删除。