GitLab CI 启用 SCP

2024-03-22

我目前正在使用 GitLab.com 上的共享运行器之一。是否可以设置 .gitlab-ci.yaml 文件,以便构建可以将 SCP 文件从远程服务器传输到运行器上?我的目标是 SCP 文件,这些文件是我的构建所必需的依赖项,但它们不会在任何 Git 存储库中进行跟踪。

我已经标记了我希望能够执行传输的行,但我不知道如何正确表达它。

注意:CodeA 在 Code 和 CodeC 中有依赖项,必须在 CodeA 编译之前构建它们,因此我需要访问 Code 和 CodeC 才能首先在 ubuntu 映像上构建它们。

image: ubuntu:12.04

before_script:

build_CodeC:
  stage: build
  allow_failure: true
  script:
-->- scp user@remoteServer:/home/user/file.tar . <---
   - sh ./continuous_integration/build_CodeC_dependency.sh

build_CodeB:
  stage: build
  script:
    - sh ./continuous_integration/build_CodeB_dependency.sh

build_CodeA:
  stage: build
  script:
    - sh ./continuous_integration/build_CodeA.sh

从你的问题来看here https://stackoverflow.com/questions/43595993/approach-for-using-gitlab-ci-for-complex-builds,我认为通过 http 获取依赖项是不可能的,所以这是您需要执行的操作才能使用scp:

  • 生成密钥对
  • 复制privategitlab CI 变量的键(我们称之为SSH_PRIVATE_KEY)
  • 复制publicgitlab 将连接到的服务器的密钥并将其添加到您的~/.ssh/authorized_keys file
  • 告诉您的 CI 管道使用存储在 Gitlab CI 变量中的私钥

为了完成最后一步,只需将以下内容添加到您的.gitlab-ci.yml在感兴趣的作业的 script 或 before_script 部分:

- '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")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

您可能还想指定 CodeA 依赖于 B 和 C。为了使其正常工作,build_CodeB 和 build_CodeC 需要处于与 build_CodeA 不同的阶段。

除此之外,您还需要一种方法将构建的文件从 build_CodeB 和 build_CodeC 作业传送到 build_CodeA 作业。一种方法是使用文物 https://docs.gitlab.com/ce/ci/yaml/README.html#artifacts.

最后,你的.gitlab-ci.yml文件应该看起来像这样:

image: ubuntu:12.04

stages:
  - deps
  - build

build_CodeC:
  stage: deps
  allow_failure: true
  script:
    - '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")
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - scp user@remoteServer:/home/user/file.tar .
    - sh ./continuous_integration/build_CodeC_dependency.sh
  artifacts:
    paths:
      - path_to_built_codeC

build_CodeB:
  stage: deps
  script:
    - sh ./continuous_integration/build_CodeB_dependency.sh
  artifacts:
    paths:
      - path_to_built_codeB

build_CodeA:
  stage: build
  dependencies:
    - build_CodeB
    - build_CodeC
  script:
    - sh ./continuous_integration/build_CodeA.sh

我只将 SSH 密钥设置部分放在 build_CodeC 中,因为这就是您使用的地方scp。您需要将其复制到任何需要使用的作业scp。我认为您可能需要在 build_codeB 中执行此操作,因为您的 tar 文件不会被传送到 build_CodeB 作业。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitLab CI 启用 SCP 的相关文章

  • Maven 构建在 Jenkins 上失败,但可以在本地计算机上运行

    我有一个全新安装的 Debian Wheezy 服务器 运行 Jenkins 1 596 最新版本 安装自官方deb包 http pkg jenkins ci org debian 为了与詹金斯一起玩 我创建了一个新的Maven项目使用 G
  • Gitlab 备份错误:包对象因信号 9 死亡

    我有一个存储库 有 2 个分支 大小为 3 5GB 每个分支大约 1 5GB git 本身就有 700MB 这是错误 备份失败 失败的 失败 opt gitlab embedded bin git git dir mountdata git
  • 如何在gitlab中发布javadoc?

    如何在gitlab中发布javadoc 到目前为止 我已将 java docs html 页面添加到存储库中 但是当我尝试查看它们时 会显示原始文本 html 源 而不是呈现的 html 页面 有可能吗 为任何偶然发现这个问题的人提供更新
  • gitlab:带有大型存储库的 git clone https 失败

    当尝试通过 https 克隆大型存储库 700MB 时 git 失败并显示 c git projects gt git clone https git mycompany de fs git Cloning into fs Username
  • 使用 git filter-branch 然后 git push --force 清除大文件后,远程(Gitlab)上的 Git 存储库大小仍然很大

    我已按照 Gitlab 文档中有关 使用 Git 减少存储库大小 的说明进行操作 通过从历史记录中清除大文件 https docs gitlab com ee user project repository reducing the rep
  • jbehave 与 jenkins 的集成

    我必须将 jbehave 与 jenkins 集成 但我不知道该怎么做 我看到我必须在 Jenkins 中创建一个任务 但我不知道应该在哪里连接 jbehave 与此任务 有人可以帮助我吗 Thanks Sarang 所以我假设您已将 JB
  • AWS CodeBuild - 如何跳过构建

    我的构建是在每次推送到存储库和每次拉取请求时触发的 因此 CODEBUILD SOURCE VERSION 看起来像 pr 8 或 4570d2e7158cfef687af8da31d1ffec7b02e5ca3 我只希望为 pr 分支执行
  • 通过 TFS 构建服务执行时 MSBuild 找不到引用

    我有一个参考 Telerik 程序集的解决方案 引用的版本已安装在构建服务器上 问题是 持续集成构建总是成功的 直到我升级解决方案和构建服务器上的 Telerik 程序集 现在构建无法提供经典的 无法解析此引用 我检查了我的解决方案 一切都
  • 即使存储库存在于 git_data_dirs 路径中,Gitlab也会返回“No Repository”

    Summary 备份和迁移后 某些存储库在 Web 控制台中返回 无存储库 错误 并且无法克隆 已验证存储库是否存在 如 git data dirs 文件夹中指定的那样 作为测试 我可以直接从 repositories 文件夹克隆 无存储库
  • Gitlab-runner 更改 builds_dir

    我在生产服务器上的默认 builds dir 是 root builds qL8eZYTH 0 faramarzqoshchi testing gitlab runner 我希望它是这样的 home domain name public h
  • GitLab 是否通过 git-annex 或其他方式支持大文件?

    我运行一个 GitLab 实例 并希望允许我的用户上传几乎任何大小的文件 众所周知 git 在处理大文件方面仍然存在问题 我知道通过将文件存储在其他地方并仅对元数据进行版本控制来规避此问题的方法 例如git annex git media
  • 如何通过运行构建队列重新启动 Jenkins?

    我们的 Jenkins 执行大量集成测试 詹金斯运行的时间越长 测试所需的时间就越长 因此 我们每天晚上通过 cronjob 重新启动 Jenkins 服务器 同时 构建队列太长而无法完成 当前正在运行的作业被取消并失败 那太丑了 我找到了
  • 在 gitlab 中创建一个 wiki 页面

    我正在尝试在 gitlab 上创建一个简单的 wiki 页面 有人知道有什么好的教程可以帮助我实现这一目标吗 我尝试在谷歌上搜索任何教程 但找不到任何相关的教程 您可以使用http pad haroopress com http pad h
  • Bitbucket Pipeline - 如何排除文件或文件夹?

    如何排除文件夹或文件上传到服务器 我想忽略 src 文件夹和package json image node 10 15 3 pipelines branches develop step caches node name Deploy to
  • 如何使用 LDAP 身份验证使用 gitlab 设置管理员用户?

    我刚刚设置了 gitlab 但我完全迷失了管理员用户 维基百科似乎对这个话题保持沉默 谷歌也没有提供帮助 那么 如何在 LDAP 身份验证上使用 gitlab 设置管理员用户 您还可以通过在 Rails 控制台中执行以下操作来为用户设置管理
  • Github Action 触发另一个存储库更新(push、pull_request)

    我在为我和一些朋友设置适当的构建链时遇到一些麻烦 因此 我分叉了两个存储库 官方 ghidra 和 ghidra ci ghidra ci 是一个构建您的 ghidra 分支的存储库 当您挑选一些 pr 时 您可以添加一些尚未添加到官方 g
  • 筛选 NUnit MSBuild 任务的类别?

    我正在设置一个 MSBuild 项目来运行一些 NUnit 测试 使用MSBuild 社区任务项目 http msbuildtasks tigris org 通过这些设置 我将能够运行 NUnit 测试
  • VSTS Build - 根据拉取请求中修改的文件选择运行哪些单元测试

    我想根据触发管道的 PR 中修改的文件来控制 VSTS 构建管道中运行的单元测试 有没有办法检测在为该 PR 触发的 VSTS 构建期间拉取请求中修改了哪些文件 然后根据该信息选择要运行哪些测试 是的 这是可能的 手动方法 一种方法是在管道
  • gitlab 请求将分支 A 合并到开发中(落后 3 次提交)我应该担心吗?

    在 gitlab 中创建合并请求时 我经常收到一条消息 请求将分支 A 合并到开发中 x 提交落后 gitlab想告诉我什么 我应该担心还是需要修复某些东西 什么 一段时间后合并请求在项目中打开时 由于其他人合并了自己的更改 您尝试合并到的
  • Gitlab CI - $CI_COMMIT_TAG 为空

    构建时 我需要在 gitlab ci yml 中上次推送的 git 提交的标记值 在构建过程中 我构建了一个 docker 镜像 构建完成后 我想推送这个带有与我的 git 提交相同标签的镜像 到目前为止我的理解是环境变量 CI COMMI

随机推荐

  • 动态地将 BoxView 添加到网格 [Xamarin.Forms]

    我正在尝试使用 3 列和多行以网格格式添加 BoxView 我已经使用 xaml 和行为定义了网格 在 c 文件中 应该发生的是 应该为相同数量的图像创建 BoxView 每列 3 个图像 Thanks XAML
  • 如果禁用第 3 方 cookie,facebook javascript/php SDK 可以相互“对话”吗? facebook->getUser() 返回 0

    我正在构建一个与 facebook javascript php SDK 一起工作的网站 它通常运行良好 但是 我发现对于一台使用 chrome 的测试机 当我从客户端 javascript 端执行 FB 登录时 PHP sdk后端无法识别
  • Google 表格脚本错误“无法访问服务:镜像”

    我在 Google Sheets 中有一个脚本 实际上我无法执行任何操作 例如 function onOpen e var ui SpreadsheetApp getUi Or SpreadsheetApp or FormApp ui cr
  • 从封闭泛型中提取泛型类型

    我想要这样的东西 class Foo
  • DOM VBA IE11 自动在网站上下订单 - OnChange 和图片上传出现问题

    我们有一个虚拟助手在此网站上下了数百个球标订单 https www golfballs com Golf Misc Tools Classic Photo Poker Chips 3 Pack htm https www golfballs
  • 如何访问所有 URL 的 Selenium Python

    我试图访问所有显示的网址 但它首先访问而不是所有 谷歌搜索网址 browser get https www google co uk search q Rashmi oq Rashmi aqs chrome 69i57j69i60l3 68
  • 如何在 Windows 中查看正在执行的 java 程序的类路径和 jvm 参数

    在 nix 我只是这样做ps ef grep java查看正在执行的 java 程序的 jvm 参数和类路径 如何在 Windows 命令提示符中看到它 我想看看某些 jar 是否实际上位于正在运行的 weblogic 服务器的类路径中 从
  • Javascript for循环var“i”被视为字符串?

    我正在使用 Titanium 构建一些移动应用程序 我注意到这会产生我意想不到的结果 data a b c d for var i in data Ti API debug i 1 这将打印 01 11 12 13 这是 Titanium
  • 错误:java.lang.IllegalArgumentException:不支持额外示例

    如果我执行这个方法 tiff TiffImage getTiffImage rafa i false 然后就是通过下面的异常 谁能给我这个异常的任何解决方案 Exception Stack Trace java lang IllegalAr
  • 在 Objective C 中使用枚举类型作为属性

    我是一名资深的 NET 开发人员 这是我第一次涉足 Objective C 编程 我在处理枚举类型的属性时遇到困难 一些上下文 我有一个类标头和枚举 如下所示 typedef enum Open Unavailable Unknown Lo
  • RichTextBox 和特殊字符 C#

    我需要将 RTF 格式的文本放入 richtextbox 中 我尝试将其与richtextbox rtf TextString参数 但问题是该字符串具有特殊字符 并且 Richtextbox 无法正确显示所有字符串 我正在使用的字符串和代码
  • 字节码指令和处理器操作之间的关系

    Java 规范保证原始变量赋值始终是原子的 除了long和双types 相反 获取并添加 http en wikipedia org wiki Fetch and add对应著名的操作i 增量操作将是非原子的 因为会导致读取 修改 写入操作
  • null 对象的 FluentValidation 规则

    我一直在尝试弄清楚如何创建一个 FluentValidation 规则 在验证其属性之前检查它正在验证的对象的实例是否不为空 我宁愿将这个空验证封装在验证器中 而不是在调用代码中执行它 请参阅下面的示例代码 其中包含需要所需逻辑的注释 na
  • 如何对链表进行排序?

    我有一个链接列表 我想按特殊顺序对其进行排序 我尝试使用冒泡排序 由于我的结构 称为 Node 中有许多数据类型 因此我无法交换这些值 struct Node int data Node next Node int x data x nex
  • 桌面组合被禁用错误

    在我的 NET 4 0 上的 WPF 应用程序中 我让用户报告两个错误 这些错误似乎非常间歇性 我无法处理 下面 我发布了消息和堆栈跟踪的最上面一行 如果需要 我可以发布完整的堆栈跟踪 Message Desktop composition
  • Android:检查我的应用程序是否允许运行后台活动

    我有一个运行秒表服务的应用程序 并且我在前台运行该服务 我有一个显示计时器的通知 每秒更新一次 在我离开应用程序 30 秒后 通知停止更新 我发现原因是我的设备的电池优化 在我的应用程序的系统设置中 有一个电池优化部分 其中包含一个名为Al
  • WebSphere - 无法加载 Logmanager“org.apache.logging.log4j.jul.LogManager”

    我有一个运行 Web 应用程序的 WebSphere 应用程序服务器 我从 Eclipse 启动服务器 该应用程序中的主要日志记录框架是 log4j2 但也有一些使用 java util logging 的第三方库 我想将这些日志重定向到
  • 取消选中单选按钮[重复]

    这个问题在这里已经有答案了 该应用程序是一个步进音序器应用程序 具有 16 个无线电组 每组有 8 个按钮 它工作得很好 除非一个组选择了一个按钮 否则我无法将其关闭 除非我使用我创建的清除按钮来清除所有无线电组 我想添加的是一些代码 它表
  • Go:是否有可以在模板内使用的模数

    我的问题如标题所述 我正在尝试做类似的事情 range index element Products if index 4 0 div class row end div class columns small 3 product img
  • GitLab CI 启用 SCP

    我目前正在使用 GitLab com 上的共享运行器之一 是否可以设置 gitlab ci yaml 文件 以便构建可以将 SCP 文件从远程服务器传输到运行器上 我的目标是 SCP 文件 这些文件是我的构建所必需的依赖项 但它们不会在任何