还在加班吗?记得吃晚饭哦!

编程开发

极狐GitLab上的Building风云 - 之Docker风云必胜 JIHULAB 101

2022年03月19日 21:38:36 · 本文共 2,311 字阅读时间约 8分钟 · 3,463 次浏览
极狐GitLab上的Building风云 - 之Docker风云必胜 JIHULAB 101

接上一篇《极狐GitLab上的Building风云 - 之Java Maven雄霸天下》内容《Docker风云必胜》。

小白在极狐GitLab溜达的时候,又碰到了总舵主,赶紧拉住总舵主,上次说要教我Docker缓存优化,赶紧给我讲讲吧。

舵主:好吧,你还挺好学的,你知不知道咱们极狐GitLab天地会有Package仓库,用来管理制品的?

小白:当然知道啦,只是我没有使用过,这个可以怎么玩?

Package仓库

舵主开始给小白介绍极狐GitLab天地会的Package仓库:咱们Package仓库分两部分,Package和Container,我分别讲一下。

  • Package,可以存放我们打包好的制品,由于每个人修炼的武功并不相同,所以我们支持Maven、npm、NuGet、PyPI、Generic packages、Composer、Conan、Helm、Debian、Go、Ruby gems多种包注册。

  • Container,可以存放Docker镜像,无论是你自己Build的镜像还是你Pull的公共镜像,都可以 Push 到咱们的仓库中。

Pipeline优化

小白啊,上次我说到可以缓存优化,你之前写的例如centos:centos7,默认是去Docker Hub拉取镜像,这得依靠国际驿站网络,国际驿站太慢了,所以经常会超时,如果你先把国际驿站的 Docker Image Pull 下来,再 Push 到咱自己的仓库里,使用的时候是不是就飞快了?

所以,我们先把官方 Docker Hub 的拉取下拉,再推送到咱们自己的仓库,我举个例子,我自己维护的 https://jihulab.com/docker/hub 仓库,前面加上 registry.jihulab.com/docker/hub/,那么你之前写的单元测试阶段就可以改为:

stages:
  - test
test:
  stage: test
  image: registry.jihulab.com/docker/hub/centos:centos7
  services:
    - name: registry.jihulab.com/docker/hub/mariadb:10.6.5
      alias: "mariadb"
    - name: registry.jihulab.com/docker/hub/redis:6.0.1
      alias: "redis"
    - name: registry.jihulab.com/docker/hub/elasticsearch:7.17.0
      alias: "elasticsearch"
      command: [ "bin/elasticsearch", "-Expack.security.enabled=false", "-Ediscovery.type=single-node" ]
  variables:
    MARIADB_DATABASE: renfeid
    MARIADB_ROOT_PASSWORD: root
  before_script:
    - yum install -y wget java-1.8.0-openjdk* which
    - curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
    - rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    - yum install -y MariaDB-server galera-4 MariaDB-client MariaDB-shared MariaDB-backup MariaDB-common
    - mariadb --user=root --password="$MARIADB_ROOT_PASSWORD" --host=mariadb $MARIADB_DATABASE
      < environment/db/renfeid.sql --default-character-set=utf8
  script:
    - ./mvnw test -P gitlab -s environment/maven/settings.xml

这样就从咱自己仓库中获取镜像了,是不是快很多?

注意:你要注意Repo仓库的可见性,Package仓库默认跟随Repo仓库可见性,如果你是open开放的仓库,默认Package仓库也会被公开下载,如果要修改就去Settings总舵设置Container的可见性。

Docker风云必胜

小白说:果然快很多,谢谢总舵主指点。那既然可以存Docker镜像,是不是我可以在这里构建我自己的镜像,作为私有的Docker Hub了?

总舵主:当然了,这也是极狐GitLab提供的服务之一,你那么聪明,快去试试吧。

在上一篇的基础上再增加一个stages阶段:release发布阶段,构建Docker Image并发布到极狐GitLab Container仓库中。

经过小白一番探索,Dockerfile 就不说了,直接在上一篇文章基础上写 .gitlab-ci.yml,内容如下:

stages:
  - release
release:
  stage: release
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .
    - docker login --username=$CI_REGISTRY_USER --password=$CI_REGISTRY_PASSWORD $CI_REGISTRY_IMAGE
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
  dependencies:
    - package

以上内容解析:先选择 docker:latest 为运行环境,然后以 docker:dind 为基础镜像进行 Build 构建,$CI_COMMIT_TAG 就是获取 Git 中的 Tag 标签。

经过小白努力尝试,终于成功了,然后在自己的服务器上注册 registry.jihulab.com,就可以拉取 Docker Image 啦,看看我的成果:

Docker仓库Docker容器

到这里武功秘籍基本已经完善了,小白有点蠢蠢欲动,想去江湖上比划一下,这个时候被舵主拦住了,舵主说:小白啊,虽然你进步很快,但你知道不知道你的武功秘籍里可能有破绽,例如漏洞或弱点,咱天地会极狐GitLab也可以帮你审查漏洞哦,今天又不早了,我还要回总舵去开会,下次给你讲吧。


未完,后续请期待《极狐GitLab上的Building风云 - 之Security风云再起》。

商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.renfei.net/posts/1003516
评论与留言

以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

微信搜一搜:任霏博客