GitLabCI作业中如何使用私有仓库镜像?

开发
今天有同学在GitlabCI课程实践中遇到了一个问题,当runner需要下载私有镜像仓库中的镜像报错,提示没有权限

 如果是在vm或者物理机注册的docker类型执行器的runner,则在本机执行docker login之后就可以了。但是现在是通过docker运行的gitlabrunner 并且使用的也是docker类型的执行器。此时我们就需要在项目或者Runner配置镜像仓库的认证信息了。

注意:如果提前把镜像下载到本地供runner使用,比每次都下载要快一些的。可以设置镜像的拉取策略if-not-present。

首先,我们用docker启动runner,并注册执行器类型为docker的runner并启动runner。

  1. ## 注册 
  2. docker run -itd --rm -v /data/devops/gitlab-runner/config:/etc/gitlab-runner  gitlab/gitlab-runner:v12.9.0 register \ 
  3.   --non-interactive \  --executor "docker" \ 
  4.   --url "http://gitlab.idevops.site/" \ 
  5.   --registration-token "4qCqD8pEoLzvgzzVn5oy" \ 
  6.   --description "devops-runner" \ 
  7.   --tag-list "build,deploy" \ 
  8.   --run-untagged="true" \ 
  9.   --locked="false" \ 
  10.   --docker-image alpine:latest \  --access-level="not_protected" 
  11. ## 运行docker run -itd  \  --name gitlab-runner \  --restart=always \  -v /data/devops/gitlab-runner/config:/etc/gitlab-runner  \ 
  12.   -v /var/run/docker.sock:/var/run/docker.sock \ 
  13.   gitlab/gitlab-runner:v12.9.0  

您可以采用两种方法来访问私有注册表。两者都需要设置环境变量DOCKER_AUTH_CONFIG来存储身份验证信息 。

1作业级:要配置一个作业以访问专用注册表,请添加 DOCKER_AUTH_CONFIG为作业变量。
2平台级(每个runner):要配置Runner以便其所有作业都可以访问私有注册表,在Runner的配置中添加DOCKER_AUTH_CONFIG到环境变量中。
获取凭证信息
使用docker login生成

  1. docker login registry.example.com:5000 --username my_username --password my_password 

然后复制~/.docker/config.json的内容。

  1. [root@zeyang-nuc-service config]# cat ~/.docker/config.json 
  2. "auths": { 
  3.   "192.168.1.200:8088": { 
  4.    "auth""YWRtaW46SGFyYm9yMTIzNDU=" 
  5.   }, }, "HttpHeaders": { 
  6.   "User-Agent""Docker-Client/19.03.5 (linux)" 
  7.  } 

使用base64生成

  1. echo -n "my_username:my_password" | base64 
  2. # 示例bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=# 格式{    "auths": { 
  3.         "registry.example.com:5000": { 
  4.             "auth""(Base64 content from above)" 
  5.         }    }} 

配置凭证信息

  1. 格式化数据:{"auths": {"192.168.1.200:8088": {"auth""YWRtaW46SGFyYm9yMTIzNDU="}} 

项目级配置

将认证信息以变量的方式存储在项目或者ci文件中

  1. stages: 
  2.   - test 
  3. variables: 
  4.   DOCKER_AUTH_CONFIG: '{"auths": {"192.168.1.200:8088": {"auth": "YWRtaW46SGFyYm9yMTIzNDU="}}}' 
  5. test: 
  6.   stage: test 
  7.   tags: 
  8.     - build  image: 192.168.1.200:8088/spinnaker01/spinnaker01-nginx-demo:RELEASE-1.1.1 
  9.   script: 
  10.     - sleep 20 

系统级配置
将认证信息以变量的方式存储在runner配置文件中

  1. [[runners]] 
  2.   environment = ['DOCKER_AUTH_CONFIG={"auths": {"192.168.1.200:8088": {"auth": "YWRtaW46SGFyYm9yMTIzNDU="}}}'

测试验证

#DevOps# #GitLab# #持续交付#

 

 

责任编辑:姜华 来源: 今日头条
相关推荐

2017-03-24 09:24:21

HarborDocker镜像仓库

2024-01-22 09:12:51

2022-07-11 07:37:55

HarborContainerd

2020-08-07 17:03:24

私有镜像仓库

2019-08-18 23:46:52

私有云容器镜像仓库

2022-09-16 10:19:36

HarborContainerd

2022-12-08 19:27:38

2016-08-15 12:57:01

数据仓库索引架构维度索引

2019-10-16 10:08:58

DockerLinuxWindows

2021-01-11 09:17:49

GitLabCIMonorepoDocker

2021-07-30 06:51:28

Nginx运维web

2013-11-01 13:21:23

Dropbox

2023-11-03 13:20:13

Kubernetes

2022-05-26 08:38:10

Docker镜像运维

2019-01-08 10:12:12

GitHub私有仓库存储库

2020-08-24 07:00:00

服务器Docker技术

2023-07-11 11:01:55

Ubuntu软件仓库

2023-02-13 23:52:18

2023-09-16 19:38:17

Python私有属性私有方法

2012-06-14 15:30:58

Teradata数据仓库私有云
点赞
收藏

51CTO技术栈公众号