网站导航网,企业手机网站建设精英,wordpress手机中文版下载地址,常州市建设工程质监站网站文章目录 前言配置流程注册ssh-keygit runner映射文件方法1 .gitlab-ci.yml使用方法2 docker build 实现 总结 前言
之所以写这篇文章是由于存在以下场景#xff1a;
当前的项目编译需要依赖别的项目协同编译#xff0c;如何将别的项目也pull到该项目里#xff0c;编译成品… 文章目录 前言配置流程注册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 buildurl http://gitlab.DOMAIN.com/id 7token *********token_obtained_at 2023-05-17T08:02:32Ztoken_expires_at 0001-01-01T00:00:00Zexecutor docker[runners.cache]MaxUploadedArchiveSize 0[runners.docker]tls_verify falseimage registry.gitlab.DOMAIN.com/docker_git:latest#pull_policy if-not-presentprivileged falsedisable_entrypoint_overwrite falseoom_kill_disable falsedisable_cache falsevolumes [/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.com/docker_git:lateststage: testbefore_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 gitgitlab.DOMAIN.comafter_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如下所示
# syntaxdocker/dockerfile:1
FROM alpine
RUN apk add --no-cache openssh-client
RUN mkdir -p -m 0700 ~/.ssh ssh-keyscan gitlab.com ~/.ssh/known_hosts
RUN --mounttypessh \ssh -vvT gitgitlab.DOMAIN.com 参考CI执行脚本如下
.build:image: registry.gitlab.DOMAIN.com/docker_git:lateststage: testbefore_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_NAMEafter_script:- docker rmi $IMAGE_NAME这两种写法均可根据习惯选择。
# 写法1
docker buildx build --ssh default$SSH_AUTH_SOCK .
# 写法2
DOCKER_BUILDKIT1 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 ↩︎