GitlabCI如何实现安全获取ssh-key拉取依赖项目,打包成品
- 互联网
- 2025-08-12 18:42:02

文章目录 前言配置流程注册ssh-keygit runner映射文件方法1 .gitlab-ci.yml使用方法2 docker build 实现 总结 前言
之所以写这篇文章是由于存在以下场景:
当前的项目编译需要依赖别的项目协同编译,如何将别的项目也pull到该项目里,编译成品如何打包镜像并保存到registry中。
本文主要写在某项目进行CI流程编译时,如何拉取该项目依赖项目,中间会涉及到gitlab-runner的配置,runner运行服务器的配置,CI(.gitlab-ci.yml)流程文件编写,Dockerfile文件编写等。
配置流程 注册ssh-key新注册一个gitlab_ci的账户拥有admin权限,在gitrunnr运行的服务器上生成新的ssh-key,博主使用的是ssh-rsa。生成添加方法可以参考如下博文——简单易用多git服务器ssh密钥配置管理
该文件保存在~/.ssh/id_rsa中
git runner映射文件 [[runners]] name = "build" url = "http://gitlab.DOMAIN /" id = 7 token = "*********" token_obtained_at = 2023-05-17T08:02:32Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.cache] MaxUploadedArchiveSize = 0 [runners.docker] tls_verify = false image = "registry.gitlab.DOMAIN /docker_git:latest" #pull_policy = "if-not-present" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache","/home/dev/.ssh:/home/dev/.ssh","/var/run/docker.sock:/var/run/docker.sock"] shm_size = 0这里添加.ssh文件夹的映射,docker.sock lock在docker in docker时使用。
方法1 .gitlab-ci.yml使用 .build: image: registry.gitlab.DOMAIN /docker_git:latest stage: test before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )' - eval $(ssh-agent -s) - ssh-add ~/.ssh/id_rsa - ssh -T git@gitlab.DOMAIN after_script: - rm -rf build install跑CI可以看到输出的ssh访问成功
Welcome to GitLab, @gitlab_ci!
本文结合如下几种方法综合实现,官网教程如下:
Using SSH keys with GitLab CI/CD| GitLab
Docker executor | GitLab
方法2 docker build 实现这个需要在方法一的基础上去做,大概原理是通过ssh-agent做代理,docker build时将ssh相关参数传入docker中使其能够调用ssh-key。
ssh -vvT会打印更多详细信息。Dockerfile如下所示
# syntax=docker/dockerfile:1 FROM alpine RUN apk add --no-cache openssh-client RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab >> ~/.ssh/known_hosts RUN --mount=type=ssh \ ssh -vvT git@gitlab.DOMAIN参考CI执行脚本如下:
.build: image: registry.gitlab.DOMAIN /docker_git:latest stage: test before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )' - eval $(ssh-agent -s) - ssh-add ~/.ssh/id_rsa - IMAGE_NAME=$CI_REGISTRY_IMAGE/test:v0.0.1 - docker buildx build --ssh default=$SSH_AUTH_SOCK . - docker push $IMAGE_NAME after_script: - docker rmi $IMAGE_NAME这两种写法均可,根据习惯选择。
# 写法1 docker buildx build --ssh default=$SSH_AUTH_SOCK . # 写法2 DOCKER_BUILDKIT=1 docker build --ssh default=$SSH_AUTH_SOCK .注意image需要安装buildx否则会报错,可以参考如何建立并使用docker
docker build 的整体官方教程如下:
Dockerfile reference | Docker Docs
总结本篇博文整理一种相对简单实现目标需求的方法,其实还有使用CI Job token1,生命周期短并且可以通过Settings -> CI/CD -> Token Access -> Limit access to this project设置该token作用范围。
通过CI/CD Variables 去设置SSH_PRIVATE_KEY等方式,大家有兴趣可以深入研究。以后该部分也会持续跟新,随着实际生产加工环境逐步优化。
GitLab CI/CD job token | GitLab ↩︎
GitlabCI如何实现安全获取ssh-key拉取依赖项目,打包成品由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“GitlabCI如何实现安全获取ssh-key拉取依赖项目,打包成品”
上一篇
golang学习笔记——查找质数