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,文件,加上拉取策略

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

posted @ 2023-08-04 20:26  邹邹很busy。  阅读(126)  评论(0编辑  收藏  举报