GitLabCI作业中如何使用私有仓库镜像?
时间:2022-07-25
本文章向大家介绍GitLabCI作业中如何使用私有仓库镜像?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天有同学在GitlabCI课程实践中遇到了一个问题,当runner需要下载私有镜像仓库中的镜像报错,提示没有权限。如果是在vm或者物理机注册的docker类型执行器的runner,则在本机执行docker login之后就可以了。但是现在是通过docker运行的gitlabrunner 并且使用的也是docker类型的执行器。此时我们就需要在项目或者Runner配置镜像仓库的认证信息了。
注意:如果提前把镜像下载到本地供runner使用,比每次都下载要快一些的。可以设置镜像的拉取策略
if-not-present
。
首先,我们用docker启动runner,并注册执行器类型为docker的runner并启动runner。
## 注册
docker run -itd --rm -v /data/devops/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v12.9.0 register
--non-interactive
--executor "docker"
--url "http://gitlab.idevops.site/"
--registration-token "4qCqD8pEoLzvgzzVn5oy"
--description "devops-runner"
--tag-list "build,deploy"
--run-untagged="true"
--locked="false"
--docker-image alpine:latest
--access-level="not_protected"
## 运行
docker run -itd
--name gitlab-runner
--restart=always
-v /data/devops/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:v12.9.0
您可以采用两种方法来访问私有注册表。两者都需要设置环境变量DOCKER_AUTH_CONFIG
来存储身份验证信息 。
- 作业级:要配置一个作业以访问专用注册表,请添加
DOCKER_AUTH_CONFIG
为作业变量。 - 平台级(每个runner):要配置Runner以便其所有作业都可以访问私有注册表,在Runner的配置中添加
DOCKER_AUTH_CONFIG
到环境变量中。
获取凭证信息
使用docker login生成
docker login registry.example.com:5000 --username my_username --password my_password
然后复制~/.docker/config.json
的内容。
[root@zeyang-nuc-service config]# cat ~/.docker/config.json
{
"auths": {
"192.168.1.200:8088": {
"auth": "YWRtaW46SGFyYm9yMTIzNDU="
},
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.5 (linux)"
}
使用base64生成
echo -n "my_username:my_password" | base64
# 示例
bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=
# 格式
{
"auths": {
"registry.example.com:5000": {
"auth": "(Base64 content from above)"
}
}
}
配置凭证信息
格式化数据:{"auths": {"192.168.1.200:8088": {"auth": "YWRtaW46SGFyYm9yMTIzNDU="}}
项目级配置
将认证信息以变量的方式存储在项目或者ci文件中
stages:
- test
variables:
DOCKER_AUTH_CONFIG: '{"auths": {"192.168.1.200:8088": {"auth": "YWRtaW46SGFyYm9yMTIzNDU="}}}'
test:
stage: test
tags:
- build
image: 192.168.1.200:8088/spinnaker01/spinnaker01-nginx-demo:RELEASE-1.1.1
script:
- sleep 20
系统级配置
将认证信息以变量的方式存储在runner配置文件中
[[runners]]
environment = ['DOCKER_AUTH_CONFIG={"auths": {"192.168.1.200:8088": {"auth": "YWRtaW46SGFyYm9yMTIzNDU="}}}']
测试验证
参考链接:https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#define-an-image-from-a-private-container-registry
- Spring历史版本变迁和如今的生态帝国
- Android中Services之异步IntentService
- 使用GitHub搭建个人博客
- 这个用来玩儿游戏的算法,是谷歌收购DeepMind的最大原因
- asp.net安全检测工具 --Padding Oracle 检测
- Android中Services简析
- VUE 入门基础(2)
- VUE 入门基础(1)
- AndroidManifest.xml配置文件 android.theme大全权限设置Android Permission中英对照
- Reactive框架:简化异步及事件驱动编程
- 微信跳一跳小游戏外挂分析
- 承载WCF 数据服务
- 常用正则表达式
- StreamInsight 基本概念
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux使用iptables限制多个IP访问你的服务器
- 在 Linux 中不使用 CD 命令进入目录/文件夹的方法
- 探索Linux内核:Kconfig的秘密
- Linux中使用命令more,less,cat查看文件内容
- SSH的ssh-keygen命令基本用法详解
- 图文详解Ubuntu搭建Ftp服务器的方法(包成功)
- Linux中chown与chmod两个命令的区别详解
- 解决navicat连接不上linux服务器上的mysql问题
- 增强Linux和Unix服务器安全性的方法详解
- ubuntu下没有中文输入法的解决办法
- linux查看端口是否开放的方法总结
- Linux下删除乱码或特殊字符文件的方法讲解
- Ubuntu Server下无线网卡的配置详解
- Linux中修改mysql默认编码的方法步骤
- ubuntu16.04搭建nfs服务的方法