如何为Gitlab runner启用SSH克隆?
我在Windows Gitlab runner上通过HTTP克隆大型存储库时遇到一些问题。我尝试了几种方法来执行浅克隆或禁用克隆压缩。还是不走运 通过SSH克隆同一存储库作为临时解决方案非常有效,我希望在我们的Gitlab CI过程中实现这一点 现在的问题是,我不知道如何使用SSH作为gitlab multi runner的克隆方法。它似乎只是使用HTTP作为默认设置,关于克隆,我唯一的选择是它将执行完整克隆还是提取 有人能解释一下我如何让克隆/获取在SSH而不是HTTP上运行吗 Gitlab版本:Gitlab社区版8.10.7 谢谢 根据: 您需要:如何为Gitlab runner启用SSH克隆?,git,ssh,gitlab,gitlab-ci,gitlab-ci-runner,Git,Ssh,Gitlab,Gitlab Ci,Gitlab Ci Runner,我在Windows Gitlab runner上通过HTTP克隆大型存储库时遇到一些问题。我尝试了几种方法来执行浅克隆或禁用克隆压缩。还是不走运 通过SSH克隆同一存储库作为临时解决方案非常有效,我希望在我们的Gitlab CI过程中实现这一点 现在的问题是,我不知道如何使用SSH作为gitlab multi runner的克隆方法。它似乎只是使用HTTP作为默认设置,关于克隆,我唯一的选择是它将执行完整克隆还是提取 有人能解释一下我如何让克隆/获取在SSH而不是HTTP上运行吗 Gitlab
before_script:
# Install ssh-agent if not already installed, it is required by Docker.
# (change apt-get to yum if you use a CentOS-based image)
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY")
# For Docker builds disable host key checking. Be aware that by adding that
# you are suspectible to man-in-the-middle attacks.
# WARNING: Use this only with the Docker executor, if you use it with shell
# you will overwrite your user's SSH config.
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
# In order to properly check the server's host key, assuming you created the
# SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines
# instead.
# - mkdir -p ~/.ssh
# - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'
在脚本之前:
#安装ssh代理如果尚未安装,Docker需要它。
#(如果使用基于CentOS的映像,请更改为转到yum)
-'哪个ssh代理| |(apt get update-y&&apt get install openssh client-y)'
#运行ssh代理(在生成环境中)
-eval$(ssh代理-s)
#将SSH_PRIVATE_key变量中存储的SSH密钥添加到代理存储
-ssh add~/.ssh/config'
#为了正确检查服务器的主机密钥,假设您创建了
#SSH_SERVER_HOSTKEYS变量之前,取消注释以下两行
#相反。
#-mkdir-p~/.ssh
#-“[-f/.dockerenv]]和&echo“$SSH\u SERVER\u HOSTKEYS”>~/.SSH/known\u hosts”
作为gitlab的新手,我已经设法找到了解决这个问题的方法,因为我还没有找到改变默认克隆过程的内置方法(尽管如此)
通过,只需在之前的脚本中编写自己的克隆过程,就可以有效地完全覆盖其行为。仅出于示例的目的,下面展示了如何在HTTP克隆中实现这一点,但可以适用于ssh
cloning():
创建一个名为“gitlab runner”的新用户,并生成他们的用户身份验证令牌供以后使用(或者在您的情况下,您将生成ssh密钥)
通过在项目或组设置中添加以下变量来禁用runner的克隆过程:../settings/ci\u cd
关键:GIT_战略
价值:无
在脚本之前的中克隆您的回购,例如:
在脚本之前:
##清理工作目录
-BUILD\u DIR=/home/gitlab runner/builds/$runner\u令牌/0
-CLONE_DIR=“$BUILD_DIR/$CI_PROJECT_PATH”
-cd$BUILD_DIR
-rm-rf$克隆目录
-mkdir-p$CLONE\u DIR
每一次克隆项目(效率低下,考虑如果已经存在,则执行取回)
-git克隆http://gitlab-runner:$GITLABRUNNER\u USER\u AUTH_TOKEN@server:8888/${CI_PROJECT_PATH}.git$CLONE_DIR
-cd$CLONE\u目录
注意:以下是我在步骤2中配置的相关变量,而不是在脚本中硬编码:
RUNNER\u TOKEN
:“RUNNER TOKEN”值列在管理员“Runners”菜单中,用于您尝试运行的特定跑步者
GITLABRUNNER\u USER\u AUTH\u TOKEN
:这是您在步骤1中生成的AUTH TOKEN
进一步阅读:
你可以通过发行替代品来避免上述假账方法。或者,如果对任何项目的访问的安全影响是一个问题,则可以选择更安全的控制。作为比较:
部署密钥可在不相关或甚至不属于同一组的项目之间共享。部署令牌属于项目或组
部署密钥是您需要在计算机上生成的SSH密钥。部署令牌由您的GitLab实例生成,只提供给用户一次(在创建时)
只要已注册并启用部署密钥,它就是有效的。部署令牌可能是时间敏感的,因为您可以通过设置过期日期来控制它们的有效性
您不能使用部署项登录到注册表,也不能对其执行读/写操作,但这可以通过部署令牌实现。
您需要SSH密钥对来使用部署密钥,但不需要部署令牌
我有一个类似的问题,需要通过ssh使用克隆:在非常旧的来宾linux操作系统中使用virtualbox
executor。我可以通过做一些小的配置更改来解决这个问题:
创建一个用于访问项目的
强制将执行克隆的用户帐户使用部署密钥。在我的virtualbox
案例中,我修改了在/etc/gitlab runnner/config.toml
中为virtualbox
配置的用户的ssh配置
~/.ssh/config
在/etc/config.toml
中配置运行程序以通过ssh执行克隆
/etc/config.toml
[[runners]]
# [...]
环境=[“GIT_策略=none”]
预构建脚本=“”
#使用ssh获取(通过config.toml中的pre_build_脚本)
如果[-d“${CI_PROJECT_DIR}”];然后rm-rf“${CI_PROJECT_DIR}”;fi
mkdir-p“${CI_PROJECT_DIR}”
cd“${CI_PROJECT_DIR}”
初始化
git远程添加源”ssh://git@${CI\u SERVER\u HOST}/${CI\u PROJECT\u PATH}.git“
git获取源“${CI_COMMIT_SHA}”
git重置—硬取头
'''
# [...]
下面是添加到config.toml
的详细信息:
GIT\u STRATEGY=none
环境变量禁用运行程序的内部GIT克隆机制。(参见CI/CD参考资料的一节)
pre_build_脚本
使用执行实际克隆。在我的例子中,这是一个bash脚本,用于执行类似于
before_script:
## clean the working directory
- BUILD_DIR=/home/gitlab-runner/builds/$RUNNER_TOKEN/0
- CLONE_DIR="$BUILD_DIR/$CI_PROJECT_PATH"
- cd $BUILD_DIR
- rm -rf $CLONE_DIR
- mkdir -p $CLONE_DIR
## clone the project each time (inefficient, consider performing fetch instead if it already exists)
- git clone http://gitlab-runner:$GITLABRUNNER_USER_AUTH_TOKEN@server:8888/${CI_PROJECT_PATH}.git $CLONE_DIR
- cd $CLONE_DIR
Host gitlab.example.com
Preferredauthentications publickey
IdentityFile ~/.ssh/deploy-key
script:
- git remote set-url --push origin git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git