gitlab--image

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: gitlab--image

image


在我们之前的例子中,我们都是在执行器为 shellrunner 中运行的,但这不能满足我们的场景。例如我们在 ci 中需要构建镜像,然后推送到镜像仓库里面。这时候我们就要使用 docker 的执行器来工作了

我们先来注册一个 docker 执行器的 runner

# 进入到 runner 容器里面
[root@dce88 ~]# docker exec -it gitlab-runner /bin/bash
# 注册 runner,executor,使用 docker
# 通过 docker-image 指定一个 docker 镜像。这里使用的是 docker:latest 的镜像
# 通过 docker-volumns 挂载本地目录,挂载 docker.sock 是为了 docker:latest 镜像操控 runner 服务器的 docker 服务,要不然执行 docker 命令的时候会报错
root@c5249d1c22f7:/# gitlab-runner register -n \
> --url http://10.6.215.70/ \
> --registration-token DK3Gg2qgFr4pfntj7UxZ \
> --tag-list "docker" \
> --executor docker \
> --docker-image docker:latest \
> --docker-volumes /var/run/docker.sock:/var/run/docker.sock \
> --description "build docker images"
Runtime platform                                    arch=amd64 os=linux pid=19036 revision=6d07dd15 version=15.2.2
Running in system-mode.
Registering runner... succeeded                     runner=DK3Gg2qg
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

注册完成之后查看 gitlab 上是否显示成功

  • 默认在注册 runner 的时候需要填写一个基础的镜像,只要使用执行器为 docker 类型的 runner,后面 job 里所有的操作运行都会在容器中运行。运行完 job 之后就会删除 docker 镜像
  • 如果全局指定了 images 则所有作业使用此 image 创建容器并在容器中运行 job。如果全局未指定 image,在查看 job 中是否有指定,如果 job 中有指定。则此 job 创建容器并在容器中运行 job。如果没有指定 image,则使用注册 runner 时指定的默认镜像
不指定 image

例如我们在注册时指定了一个镜像 docker,我们先不指定 image 来查看,在 .gitlab-ci.yml 里写入下面代码

stages:
  - build
  - test
build:
  stage: build
  tags:
    - docker
  script:
    - echo "我是 build 的 job"
    - sleep 10
    - docker # 执行 docker 命令
test:
  stage: test
  tags:
    - docker
  script:
    - echo "test 的 job"
    - docker -v # 查看 docker 版本

当流水线运行开始之后,我们在部署了 gitlab-runner 的机器上看下,新创建了一个 docker 镜像,名称为:runner-zdds-4ak-project-5-concurrent-0-fda7b19046212061-build-2,如下。我们的所有 job 都是在这个容器中运行的

[root@dce88 run]# docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED                  STATUS                  NAMES
5d026d5f96ae   66743f183cc1                   "docker-entrypoint.s…"   Less than a second ago   Up Less than a second   runner-zdds-4ak-project-5-concurrent-0-fda7b19046212061-build-2
c5249d1c22f7   gitlab/gitlab-runner:v15.2.2   "/usr/bin/dumb-init …"   2 days ago               Up 2 days               gitlab-runner

注意:job 运行完成之后就把容器删除了

接下来去看下 build job 的日志


指定全局的 image

上面我们没有使用 image,就使用的是我们注册 runner 时的镜像,接下来我们指定一个全局的 image

注意:job 的 image 会覆盖掉全局的 image,job 里的优先级高

default: # 定义默认的
  tags:
    - docker
  before_script:
    - echo "before_script"
# 定义了一个全局的 image,如果写在 default 下,就是每个 job 都加上了,就不是全局的了
image: release-ci.daocloud.io/common-ci/common-ci-builder:v0.1.21 
stages:
  - build
  - test
build:
  stage: build
  script:
    - echo "我是 build 的 job"
    - sleep 10
    - docker
test:
  stage: test
  script:
    - echo "test 的 job"
    - docker -v

在来查看 build 的日志

在来查看 test 的日志

指定 job 的 image

上面说了,job 的 image 优先级高于全局的 image,如果没有全局的 image,则有 image 的 job 使用自己的 image。没有 image 的 job,则使用创建 runner 时指定的镜像。例如下面的例子

default: # 定义默认的
  tags:
    - docker
  before_script:
    - echo "before_script"
stages:
  - build
  - test
build:
  stage: build
  image: release-ci.daocloud.io/common-ci/common-ci-builder:v0.1.21 # 这个 job 使用自己的 image
  script:
    - echo "我是 build 的 job"
    - sleep 10
    - docker
test:
  stage: test
  script:
    - echo "test 的 job"
    - docker -v

查看 build 的日志

看 test 的 job


设置 runner 里 image 的拉取策略


从上面可以看到,每次都会拉取镜像

修改 runner 的 config.toml,文件,加上拉取策略

修改完后在次运行流水线,观察效果


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
Linux Docker Windows
docker pull 报错解决:error pulling image configuration: Get https:..
docker pull 报错解决:error pulling image configuration: Get https:..
4006 0
|
2月前
|
网络虚拟化 Docker 容器
docker Desktop报错 error pulling image configuration 处理
docker Desktop报错 error pulling image configuration 处理
53 0
|
3月前
|
Docker 容器
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
|
4月前
|
NoSQL Redis Docker
Docker 删除 images
Docker 删除 images
28 0
|
5月前
|
JSON Ubuntu 持续交付
用skopeo检查docker image
通过Skopeo,您可以方便地获取Docker镜像的详细信息和元数据,而不需要拉取或安装整个镜像。这对于那些有成百上千镜像的大型系统是非常实用的,因为它有助于快速查看和分析镜像的特定属性。Skopeo是一个专业的工具,用于在持续集成和部署的过程中实现高效的镜像管理,既减轻了对Docker守护进程的依赖,也为容器化环境中镜像的控制提供了灵活性。
72 3
|
缓存 Go Docker
Docker - COPY & ADD
Docker - COPY & ADD
278 0
Docker - COPY & ADD
|
Docker 容器
删除docker images的正确姿势
删除docker images的正确姿势
|
Ubuntu Linux 应用服务中间件
|
Shell Docker 容器