非常感谢大家对GitLab(SaaS)本地化努力的支持,也感谢马哥的内测资质。

最近突然想出了一个使用私有镜像仓库的想法。 Extreme fox GitLab 提供了一个容器镜像库,只是对 CICD 的简单体验。

容器镜像库 Container Registry

文档介绍这里,还是英文的。 (本地化工作应该很多,文件还没翻译。)

容器镜像库可以作为一个独立的镜像仓库使用(为什么?看下一篇)。即使用docker命令将构建好的镜像推送到容器镜像库中。

当然也可以和CICD pipeline结合使用,后面会介绍。

独立使用

本地登录 Container Registry 有两种认证方式:

  • SQL Server 身份验证

  • 在双重认证,可以使用访问个人访问令牌

事实上,无论是否启动双重认证,都建议使用访问令牌。

docker登录registry.gitlab.cn

#根据提示输入用户名和密码或token

image name最多三层,即registry.example.com/[namespace]后面的内容最多三层。例如,以下图像名称为 myproject/my/image

registry.example.com/mynamespace/myproject/my/image:rc1

其次,第一层镜像名称必须是镜像名称,比如上面的myproject。

尝试推送tekton的镜像:

码头工人标签 gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.28.1 registry.gitlab.cn/addozhang/registry-mirror/tekton-pipeline/controller:v0.28.1

docker 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"}]

用CICD构建和推送

见下文。

CICD

我这里将github使用的test tekton项目镜像到,并添加了一个。 gitlab-ci.yml管道定义文件。

是的官方文档,并参考了官方模板,管道的定义非常快。

整个流水线包括两个阶段:Java代码的编译打包和镜像的构建。

如上图,最新的一个是使用缓存功能缓存。平方米/存储库;前两次都用到了缓存(这里的构建时间相差很大,不知道是不是因为晚上资源少?)。 Java 项目会将依赖包保存在本地库中。使用缓存功能可以提高构建效率。

流水线 DAG

使用需求可以控制同阶段作业的构建顺序,否则同阶段作业的执行是并行的。同时,有需求,可以在至少需要三个job的前提下搭建DAG,所以我又加了一个job。

缓存:

路径:

  • .m2/存储库

变量:

MAVEN_OPTS:“-Dhttps.protocolsu003dTLSv1.2 -Dmaven.repo.localu003d$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer .Slf4jMavenTransferListeneru003dWARN -Dorg.slf4j.simpleLogger.showDateTimeu003dtrue -Djava.awt.headlessu003dtrue"

阶段:

  • 构建
  • 图片
  • 后期构建

Maven 构建:

图片:maven:3-jdk-8

阶段:构建

文物:

路径:

  • 目标/*.jar

脚本:

  • mvn 安装 -DskipTests

码头工人建造:

图片:码头:19.03.12

舞台:形象

需求:

  • Maven 构建

依赖:

  • Maven 构建

服务:

  • 码头工人:19.03.12-dind

变量:

IMAGE_TAG:$CI_REGISTRY_IMAGE:最新

脚本:

  • 码头工人登录 -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  • 搬运工构建 -t $IMAGE_TAG 。
  • 搬运工推送 $IMAGE_TAG

完成:

图片:busybox:最新

阶段:后期构建

需求:

  • 码头工人构建

脚本:

  • 回显“全部完成!”

感觉画的有点粗糙。以后应该优化。

作业依赖

在前面的管道定义中,为了传递maven构建的jar,使用artifacts和dependencies进行传递。

我错了吗?将鼠标悬停在鼠标上不会显示相关作业。

管道触发器

除了推送代码触发之外,您还可以通过 Web API 创建触发器来触发。

卷曲-X POST \

-F 令牌u003dTOKEN_HERE \

-F 参考u003d主要\

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","更新_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","用户名":"addozhang","状态":"active","头像_url":null,"web_url":"https://gitlab.cn/addozhang"},"开始_at":null,"finished_at":null,"committed_at":null,"duration":null,"queued_duration":null,"coverage":null,"detailed_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 的经验,所以体验上没有任何障碍。这也得益于文档的完善和极湖团队的努力。希望姬虎能做得更好。

在本文中,注册镜像用作仓库名称,您可以猜到一些东西。请关注下一篇文章。

文章统一在云公众号。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐