让 GitLab CI 克隆私有存储库

2024-04-10

我设置了 GitLab 和 GitLab CI 来托管和测试我的一些私人存储库。对于此系统下的作曲家模块,我设置了 Satis 来解析我的私有包。

显然这些私有包需要 ssh 密钥来克隆它们,并且我在终端中可以使用它 - 我可以运行composer install并获取这些包,只要我添加了密钥ssh-add在壳里。

但是,当在 GitLab CI 中运行我的测试时,如果项目具有任何这些依赖项,则测试将无法完成,因为我的 GitLab 实例需要身份验证才能获取 deps(显然),并且测试失败并提示Host key verification failed.

我的问题是如何设置,以便运行程序运行测试时无需密码即可向 gitlab 进行身份验证?我尝试在我的跑步者中放置无密码 ssh 密钥~/.ssh文件夹,但是构建甚至不会添加键“evalssh-agent -s“随后的 ssh-add 似乎失败,表示代理未运行......


另请参阅其他解决方案:

  • git 子模块权限(参见马可·A.的回答 https://stackoverflow.com/a/42224451/831180)
  • 工作令牌并覆盖 git 配置中的存储库(请参阅a544jh 的回答 https://stackoverflow.com/a/49552383/831180)

这里是 SSH 密钥的完整操作方法:

总体设计

  • 生成一对 SSH 密钥
  • 将私有变量添加为项目的安全环境变量
  • 使私有的可用于 GitLab-CI 上的测试脚本
  • 将公共密钥添加为每个私有依赖项上的部署密钥

生成一对 SSH 公钥和私钥

生成一对不带密码的 SSH 公钥和私钥:

ssh-keygen -b 4096 -C "<name of your project>" -N "" -f /tmp/name_of_your_project.key

将 SSH 私钥添加到您的项目中

您需要将密钥作为安全环境变量添加到您的项目中,如下所示 下列的:

  • browse https://<gitlab_host>/<group>/<project_name>/variables
  • 单击“添加变量”
  • 填写文本字段Key with SSH_PRIVATE_KEY
  • 填写文本字段Value使用 SSH 私钥本身
  • 点击“保存更改”

将 SSH 私钥公开给您的测试脚本

为了使您的私钥可用于您的测试脚本,您需要添加 以下内容给您的.gitlab-ci.yml file:

before_script:
  # install ssh-agent
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  # run ssh-agent
  - eval $(ssh-agent -s)
  # add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  # disable host key checking (NOTE: makes you susceptible to man-in-the-middle attacks)
  # WARNING: use only in docker container, if you use it with shell you will overwrite your user's ssh config
  - mkdir -p ~/.ssh
  - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

代码片段来自 GitLab 文档 https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc//ci/ssh_keys/README.md

将公共 SSH 密钥添加为所有私有依赖项的部署密钥

您需要将公共 SSH 密钥注册为所有私有密钥的部署密钥 依赖关系如下:

  • browse https://<gitlab_host>/<group>/<dependency_name>/deploy_keys
  • 单击“新部署密钥”
  • 填写文本字段Title与您的项目名称
  • 填写文本字段Key使用公共 SSH 密钥本身
  • 单击“创建部署密钥”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 GitLab CI 克隆私有存储库 的相关文章

  • 从 Bash 调用的 Expect 脚本的退出状态代码

    我制作了一个 Bash 脚本 它使用 Expect 脚本来自动进行 ssh 登录 该脚本连接到多个服务器并运行一些命令 bash 脚本会提示输入一次登录凭据 我想合并一个功能 其中如果第一个服务器登录失败 脚本将终止 以避免脚本检查下一个服
  • 开始作业时无法识别功能

    我在模块 sysinfo psm1 中创建了一个函数 Get Uptime 并导入了该模块 C pstools gt get command Module sysinfo CommandType Name Definition Functi
  • MSTest 命令行设置

    我们需要能够将服务器地址传递到 MSTest 命令行中 以便由 TeamCity 持续集成 CI 软件调用我们的测试套件 之前我们在 C 单元测试中创建了 if 常量 这在 MSBuild 中进行了更改 有没有更好的办法 这种方式看起来很h
  • GitLab CI语法来编写FOR循环语句?

    以下是 gitlab ci yml 文件中提到的脚本 此 GitLab CI 配置有效 但是 当运行 CI CD 构建时 作业会失败 与 FOR 循环语法有关吗 deploy dv stage deploy dv variables GIT
  • 在应用程序版本中使用 svn 修订号

    在 VS2010 解决方案 不是 NET 中 我希望将 svn 修订号作为应用程序版本的一部分包含在内 我们目前不使用 makefile 仅使用 VS 解决方案 项目设置 我想在编译时获取工作副本修订号 将其存储到变量中 以便稍后在代码中使
  • SQLPLUS 保存到文件

    我必须为我的数据库类使用 SQLPLUS 我们的第一个作业是简单的保存 我按照说明进行操作 我正在使用 PuTTY 访问 sqlplus 在本练习中使用以下 SQL 命令 并尝试使用 SAVE 和 SPOOL 命令将 SQL 命令和输出保存
  • Jenkins Git 参数插件无法获取标签

    詹金斯版本 1 593 Git 参数插件 0 4 0 GIT 客户端插件 1 16 1 我使用私有 git 存储库 可以通过 ssh 访问 我的构建是参数化的 git参数是TAG TO BUILD 要构建的分支是refs tags TAG
  • 健全性检查 SSH 公钥? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已要求用户提供他们的公共 id rsa pub ssh 密钥 然后将其放入 home theiraccount ssh authorized key
  • Capistrano 和 GitHub Private Repo – 权限被拒绝(公钥)

    我继承了一个托管在 Linode 上的 Rails 项目 之前的开发人员使用 BitBucket 存储库以及 Capistrano 进行部署 我已经在 GitHub 上设置了一个私人存储库 并且正在尝试让 Capistrano 配方发挥作用
  • ssh 的 url 方案:在远程主机上调用命令

    是否有通过 ssh 调用远程主机上的命令的 url 方案 在我的用例中 我想称之为 psql c select from my table order by id 似乎有一个关于连接参数的 RFC 示例 来自https tools ietf
  • 如何以编程方式从 Gitlab LFS 检索文件?

    Question 当需要身份验证时 如何以编程方式从 Gitlab 下载文件 Context 我想以编程方式从 Gitlab 检索 LFS 文件 这API https docs gitlab com ee api不幸的是 没有提供正确的终点
  • 使用 Jenkins Git 插件中的 SSH 密钥在构建期间运行 Git 命令

    我们在 Jenkins 上的构建作业作为发布构建的一部分运行一些 git 命令 例如 git push 和 git pull 因此需要一种在构建期间从 shell 运行经过身份验证的 git 命令的方法 我们的詹金斯奴隶不持有任何凭证 因为
  • 在 GitLab CI 中使用合并请求作业中的工件

    在我的项目中 我使用合并请求来测试构建 并在提交合并到主版本后进行部署 目前我的 gitlab ci yml好像 build stage build script yarn build artifacts paths public depl
  • 如何调试(最好在 IDE 中)MSBuild 脚本?

    我们非常广泛地使用 MSBuild 作为我们持续集成过程的一部分 虽然它非常强大 我们几乎可以在其中完成所有构建 测试和部署 利用一些自定义任务 我们发现使用标签对其进行调试是一种痛苦 并且不能总是为我们提供足够的信息 我发现 http w
  • gitlab runner ssh私钥644文件权限错误

    运行 gitlab ci cd 管道时 ssh 给出 0644 badpermission 错误 变量作为文件类型存储在 gitlab 的 settings gt variable 部分中 gitlab ci yml 文件如下所示 stag
  • 詹金斯:${BUILD_LOG, maxLines, escapeHtml} 不起作用

    我正在尝试使用 BUILD LOG maxLines escapeHtml 如下所述 如何从 BUILD LOG 变量中获取最后 20 行 https stackoverflow com questions 16089096 how can
  • 如何将参数从jenkins传递到selenium

    我正在使用詹金斯和硒 我需要将测试 url 从 jenkins 发送到 selenium 服务器 在常规选项卡下 詹金斯字符串参数 Name APP Default Value http localhost basecode 在构建后操作下
  • 如何在两个不同帐户之间设置无密码身份验证

    我们可以在两台机器的两种不同用途之间设置无密码身份验证吗 例如 计算机A有用户A 计算机B有用户B 我们可以设置密码 ssh 以便计算机 A 上的用户 A 使用其用户帐户 A 登录计算机 B 谢谢你 如果我理解你的问题 你能设置一下吗ssh
  • PHP shell_exec 使用 ssh 运行 shell 脚本

    我有一个 shell 脚本 使用 ssh 和密钥连接到另一台机器 因此它不需要用户名和密码 当我从命令行运行这个脚本时 它工作正常 但是当我从 php shell exec 运行这个脚本时 它不起作用 如果我与 PHP 建立 ssh 连接并
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123

随机推荐

  • 关于从 MongoMapper 迁移到 Mongoid 的建议?

    从性能和开发活动来看 Mongoid 现在似乎是 Mongo 的卓越 ORM 不幸的是 我们使用的是 MongoMapper 并且需要迁移 有什么我们应该注意的问题或绊脚石吗 我们在 Google 上发现了一些过时的文章 并尝试在 Mong
  • 使用 React-Router 在页面内链接

    我正在尝试制作一个锚标记 它将链接到同一页面中的某个位置 例如this http www echoecho com htmllinks08 htm 然而 React Router 劫持了它 并将我路由到任何地方 因为我还没有在层次结构中建立
  • 如何防止 Spring Boot 守护进程/服务器应用程序立即关闭/关闭?

    我的 Spring Boot 应用程序不是 Web 服务器 而是使用自定义协议的服务器 在本例中使用 Camel 但是 Spring Boot 在启动后立即停止 优雅地 我该如何防止这种情况 我希望应用程序能够通过 Ctrl C 或以编程方
  • 参数 targetplatformversion 不能为 null - Visual Studio 2015

    我有 Windows 10 安装了 Visual Studio 2015 的笔记本电脑 我正在尝试创建一个通用 Windows Phone 应用程序的新项目 我总是收到错误参数 targetplatformVersion 不能为空 以下是我
  • 插入符 rfe + sum 与 ROC 中的特征选择

    我一直在尝试使用插入符包应用递归功能选择 我需要的是 ref 使用 AUC 作为性能衡量标准 经过一个月的谷歌搜索后 我无法让该过程正常运行 这是我使用过的代码 library caret library doMC registerDoMC
  • ElasticSearch Nest BulkAll 在收到无法从 _bulk 重试的失败后停止

    Using BulkAll 批量插入时我收到这个奇怪的错误 BulkAll halted after receiving failures that can not be retried from bulk 但是 当我检查异常时 我仍然得到
  • 您将使用什么 HTML/CSS 来创建带背景的文本输入?

    我的网站设计包括如下所示的文本输入字段 输入字段http img401 imageshack us img401 4453 picture1ts2 png http img401 imageshack us img401 4453 pict
  • tooltip.js popper.js 使用示例

    由于不太精通 javascript 我不明白工具提示 js https popper js org tooltip documentation html根本没有文档 为什么不包括像我这样的人的例子 我必须安装这个库才能正常工作吗 I add
  • Visual Studio 模板参数不返回值?

    我试图在创建 Visual Studio 模板时获取这些参数 但它不返回值 它只是保持这样 string rootnamespace rootnamespace this is the output it just stays as it
  • 添加画布 - Android

    我动态创建画布 Canvas canvas new Canvas 但我怎样才能将它添加到我的 LinearLayout 中呢 LinearLayout ll new LinearLayout this 您可以使用简单的 addView 来完
  • 解决 VS 2017 中的“节点定义冲突”TS4090 错误

    我有一个可以构建并运行的 TypeScript 项目 但我有大量构建错误 这些错误似乎都源于一个错误 TS4090 TS 在 C projectpath node modules types node index d ts 和 C Micr
  • 当通过 setImageBitmap() 设置时,ImageView 将不会显示图像

    我在显示 SD 卡上的现有图像时遇到问题 ImageView photoView ImageView findViewById R id img photo File photoFile new File Environment getEx
  • Firebase - 从数据库节点获取随机子节点

    我正在写一个Firebase Cloud Function这是从一个调用的Android应用程序 该函数应该从用户节点中获取一个随机用户Database 任何随机用户 但不是发送请求的用户 并将其返回给客户端 问题在于数据不是以数组的形式构
  • 如何正确地将日期转换为字符串并以 symfony 形式转换回来,以便可以使用日期选择器

    在我的 Symfony 4 应用程序中 我有一个包含日期类型字段的实体 默认情况下 Symfony 将其呈现为一组月 日 年的选择框 我已将其更改为文本小部件 以便我可以使用 jQuery UI 日期选择器 但我在尝试提交表格时遇到了问题
  • SCOM 上的 PowerShell 无法导入模块

    我有一个问题 如果没有帮助 我无法解决 我在第一台 PC 上有 SCOM 在第二台 PC 上有 SCOM 代理 当我的类在代理 PC 中发现时 它必须运行 PowerShell 脚本 该脚本包含命令 导入模块故障转移集群 但此命令失败并出现
  • 是什么导致 Web 服务 URL 和命名空间之间存在差异?

    我有一个包含 Web 服务的 ASP NET Web 项目 当我运行该服务时 它会将我带到一个显示所有公开方法的页面 使用类似于以下内容的 URLhttp api example com game service asmx 在 Web 服务
  • MySql - 大小 VARCHAR

    很多人对我说设置 VARCHAR 100 没有意义 它与 put 255 相同 我想知道为什么 那是垃圾 他们可能正在谈论这样一个事实 varchar无论最大长度是 100 还是 255 超过该长度的长度将使用两个字节 最多 64K 都使用
  • 关于 NSRunLoop,需要澄清

    When i Logger logger Logger new NSURL url NSURL URLWithString http www google com NSURLRequest request NSURLRequest requ
  • 如何使用 Linq To XML 获取元素值

    使用 Linq To XML 如何从下面的 xml 中获取 space id 值 720 我在读this http msdn microsoft com en us library bb308960 aspx但我认为xml中的命名空间是我的
  • 让 GitLab CI 克隆私有存储库

    我设置了 GitLab 和 GitLab CI 来托管和测试我的一些私人存储库 对于此系统下的作曲家模块 我设置了 Satis 来解析我的私有包 显然这些私有包需要 ssh 密钥来克隆它们 并且我在终端中可以使用它 我可以运行compose