Gitlab CI如何部署最新到特定目录

2024-01-26

我在 Gitlab 中有两个项目,其中一个是另一个项目(我们称这个存储库为“main”)的子模块(我们称其为“前端模板”)。我已经为“frontend-templates”存储库设置了 Gitlab CI 构建。问题是我不需要测试或构建。我只需要在所需的目录中部署此 CI。因此,我为“frontend-templates”项目注册了一个运行程序,并将 .gitlab-ci.yml 添加到根目录:

job_main:
   type: deploy
   script: echo "Do nothing"

当我推送到存储库时,运行程序会将最新提交获取到以下目录:

/home/gitlab-runner/builds/6231b425/0/Gasimzada/frontend-templates

并运行echo "Do nothing".

现在,我希望运行程序将“经过测试的”提交部署到开发服务器,该服务器位于:

/var/www/myapp/submodules/frontend-templates

编辑:我将脚本更改为

script: cd /var/www/myapp/submodules/frontend-templates && git pull

但我收到一条错误消息:

无法打开 /var/www/myapp/.git/modules/submodules/frontend-templates/FETCH_HEAD:权限被拒绝

这是有道理的,因为 gitlab-runner 用户无权访问 /var/www/myapp 中的任何目录,但这对我来说是一个问题,因为我想运行gulp部署后,因此它在从远程存储库拉取后编译必要的脚本。

我应该给开发环境根目录权限吗?或者还有其他方法可以做到这一点吗?


您可以使用您所在的目录简单地执行某种形式的部署。您可以重命名/删除当前部署代码的目录并将签出代码复制到那里(rm -rf /var/www/myapp/submodules/frontend-templates && cp -r . /var/www/myapp/submodules/frontend-templates)或者你可以使用rsync进行同步。

然而,这些不是原子操作 - 它们将使您部署的代码在执行时处于不确定状态,如果失败则会造成混乱。我建议你的/var/www/myapp/子模块/前端模板只是一个指向包含代码的目录的符号链接:

/var/www/myapp/submodules
  | - 7348110b
  | - a03ed59a
  | - frontend-templates -> ./a03ed59a

您可以根据提交哈希来命名代码目录。工作本身可能看起来像这样:

job_main:
   type: deploy
   script:
     - cp -r . /var/www/myapp/submodules/$CI_BUILD_REF
     - ln -s ./$CI_BUILD_REF /var/www/myapp/submodules/templink
     - mv -Tf /var/www/myapp/submodules/templink /var/www/myapp/submodules/frontend-templates

注意:显然,运行者需要必要的文件权限才能执行任务。

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

Gitlab CI如何部署最新到特定目录 的相关文章

随机推荐

  • 实体框架 4:继承和关联

    我确实从提供跟踪的基类派生出我的实体 Since User源自于TrackableBase and TrackableBase与 关联User 我收到错误 无法确定相关操作的有效顺序 由于外键约束 模型 可能存在依赖关系 要求或存储生成的值
  • OData分页与skip和top - 如何知道没有更多数据?

    我有 OData 源 它实现了 skip and top参数 返回的实体数量为 x 假设我只有 250 个实体 然后我尝试像这样进行分页 https example com EntitySet top 30 skip 220 如果我的跳过超
  • 使用 jaxb 验证复杂对象中的嵌套对象

    我有一个像这样的对象的 xml 表示 OrderList has list of 订单 每个订单都有一个商品列表 我想验证我的商品 如果无效 我想将它们从订单中删除 如果所有商品都无效 那么我会从订单列表中删除该订单 我已经能够验证订单列表
  • 将包含 JSON 对象数组的 Spark 数据帧列转换为多行

    我有一个流式 JSON 数据 其结构可以用下面的案例类来描述 case class Hello A String B Array Map String String 相同的示例数据如下 A B ABC C 1 D 1 C 2 D 4 XYZ
  • Spritekit - 不从 SKTextureAtlas 加载 @3x 图像

    由于我的示例项目被删除 我认为这会更容易测试 我将发布一些代码和图像来说明我的观点 这是示例图像 我的图集设置 我的启动图像设置 我将这些精灵添加到场景中的代码 override func didMoveToView view SKView
  • 如何在 Blazor Hybrid 中的 muddatagrid 列中增加模型的值

    如何增加 muddatagrid 列中模型的值 如果我按 olus 图标 它将增加所有数量 建议我一种可以与 onclick eventcallback 一起使用的方法 我还需要将其增加 0 5
  • 如何模拟 URLSession.DataTaskPublisher

    我该如何嘲笑URLSession DataTaskPublisher 我有课Proxy需要注入一个URLSessionProtocol protocol URLSessionProtocol func loadData from url U
  • 如何将密码从文件传递到mysql命令?

    我有一个 shell 脚本 它使用外部文件中的一个参数调用 mysql 命令 它看起来像这样 我也在其他资源中看到了这个示例 mysql user root password cat root mysql 有点不工作 无法连接到 MySQL
  • Android 操作栏(如 Twitter 示例)

    实现 Twitter 示例 UI 模式等操作栏的最佳方法是什么 Android 版 Twitter 深入了解 Android 不断演变的 UI 模式 模式4 操作栏http android developers blogspot com 2
  • 在 Powershell 中写入十六进制转义字符

    有没有办法在Powershell中写这样的东西 Linux 将与 Perl 一起使用 char foo x41 我需要在我的一个程序中输入一些不可打印的字符 你可以这样做将 int 转换为 char 带十进制数 foo 65 as char
  • HttpClient GetAsync 方法 403 错误

    我正在尝试简单地显示 github 存储库 网址 https api github com search repositories q pluralsight https api github com search repositories
  • 使用cmd命令打开pwsh而不退出

    我正在尝试启动一个 Powershell 窗口 使用以下命令启动 ssh 会话 pwsh exe noexit Command ssh
  • 如何在 LINQ 中对单个联接中的多个字段进行左联接

    我正在尝试对 LINQ 执行这个简单的 sql 查询 但它给了我错误 这是需要转换为 LINQ 的 SQL 查询 DECLARE groupID int SET groupID 2 SELECT FROM dbo Person p LEFT
  • C++ 中两个向量的逐元素乘法

    我试图用两个向量进行以下数学运算 v1 a1 a2 a3 a4 a5 v2 b1 b2 b3 b4 b5 想要计算 v a2 b2 a3 b3 a4 b4 a5 b5 请注意 我不想要新向量中的第一个元素 我想知道是否有一种比 for 循环
  • Mongo shell 中的 NumberLong 算术

    如何在 Mongo shell 中对 NumberLong 值执行精确算术 据我了解 Javascript 只有一种数字类型 number 通常限制为 54 位浮点精度 使用 例如 标准加法的直接算术显示将强制转换为较低精度类型 gt Nu
  • 向 geom_bar() / geom_col() 条添加图案或纹理?

    有时 我需要某种用于 geom bar geom col 条的图案或纹理 即用于黑白打印 例如 以下内容对于某些人来说可能很难查看 library ggplot2 library dplyr warn conflicts FALSE lib
  • 设置标头并使用 $http POST 发送数据到 pocket api 返回 CORS

    无法向 pocket api 发送 http post 请求以获取请求令牌 我已经拿到消费者密钥了 问题似乎出在设置标头和发送请求中的数据 在浏览器中查看请求时 不会显示任何标头和数据 配置请求 var req method POST ur
  • 从整数的商中获取双精度值

    int velMperMin 667 int distM 70 double movT distM velMperMin 60 movtT必须等于6 30 但它是0 您需要将除法的操作数之一转换为双精度值 像这样 double movT d
  • 使用 UMAP 和 HDBScan 进行集群

    我有大量的文本数据 大约有 5000 人输入 我使用 Doc2vec 为每个人分配了一个向量 使用 UMAP 缩减为二维 并使用 HDBSCAN 突出显示其中包含的组 目的是突出具有相似主题相似性的组 这导致了如下所示的散点图 这看起来可以
  • Gitlab CI如何部署最新到特定目录

    我在 Gitlab 中有两个项目 其中一个是另一个项目 我们称这个存储库为 main 的子模块 我们称其为 前端模板 我已经为 frontend templates 存储库设置了 Gitlab CI 构建 问题是我不需要测试或构建 我只需要