首页 > 其他分享 >gitlab--image

gitlab--image

时间:2023-08-04 20:33:50浏览次数:42  
标签:-- image gitlab runner job build test docker

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

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

标签:--,image,gitlab,runner,job,build,test,docker
From: https://www.cnblogs.com/zouzou-busy/p/16755532.html

相关文章

  • 闲话8.4
    今天被课表上写着dp,pdf标题是图论的线性代数薄纱了。下午抽时间看了看明天的课件,发现了喜报:明天没有紫题......
  • Exercise: Maps
    strings.Fields拆分单词,然后用map[string]int直接统计,主要代码:1funcWordCount(sstring)map[string]int{2fields:=strings.Fields(s)3result:=make(map[string]int)4for_,field:=rangefields{5result[field]+=16}7retu......
  • 【网工玩转自动化】深入浅出TextFSM 2022终极版
    《从零开始NetDevOps》是本人8年多的NetDevOps实战总结的一本书(且称之为书,通过公众号连载的方式,集结成册,希望有天能以实体书的方式和大家相见)。NetDevOps是指以网络工程师为主体,针对网络运维场景进行自动化开发的工作思路与模式,是2014年左右从国外刮起来的一股“网工学Python"的风......
  • 包子你好,多多指教
    我也不知道为什么,你的小名叫包子你妈给起的虽然你刚出生10天,我已经通过你学到很多你对这个世界,一无所知比乔布斯的一秒钟变白痴还要厉害,你本来就是你整天都是新手心态第一次喝奶,第一次换尿布,第一次洗澡……你对各种事情都很困惑瞪着个大眼睛,不知道在想什么算了,反正也想不明白还是睡......
  • cdh4 hadoop,hive,impala,hbase本地库搭建及安装
    --hadoop文件位置:log目录:1 /var/log/hadoop-hdfs2 /var/log/hadoop-mapreduce3 /var/log/hbase4 /var/log/hive5 /var/log/hive6 /var/log/impala安装目录:1 /usr/lib启动命令目录:1 /etc/init.d/配置文件目录:1 /etc/hadoop/conf2 /etc/hbase/conf3 /etc/hive/conf......
  • 进程注入检测——DLL注入检测的几种方式:1、命令行,包含某些特定注入工具的关键字 2、排
    进程注入检测DLL注入检测的几种方式:1、命令行,包含某些特定注入工具的关键字2、排除白名单的可疑注入3、可疑的DLL加载4、特定工具注入的startaddress异常 以下内容来自CAR和splunk等开源检测渠道: title:CobaltStrikeProcessInjectionid:6309645e-122d-4c5b-bb2b-22e4f9c2fa42......
  • mof提权原理及其过程——类似定时任务里有一个添加用户的命令
    关于mof提权的原理其实很简单,就是利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd添加提权用户命令使其被带入执行。 mof提权的原理:mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nul......
  • h index查询
     https://www.scopus.com/results/authorNamesList.uri?sort=count-f&src=al&sid=cbe762454a53aa5a9b57dc7da86b3644&sot=al&sdt=al&sl=44&s=AUTHLASTNAME%28Scheirer%29+AND+AUTHFIRST%28Walter%29&st1=Scheirer&st2=Walter&orcidId=&am......
  • 菜品分页查询_代码开发和功能测试
           ......
  • 模拟赛总结(2)
    一.题目解析1.机器人输入\(s\)和\(T\),表示命令串长度和秒数。分两种情况讨论:\(1.\quads<T\quad\)这时候我们发现\(s\)是有周期性的,所以以\(s\)为周期,判断周期里的\(x\)和\(y\)是多少,然后进行计数:L=strlen(s);x=x*(T/L);y=y*(T/L);记完数之后......