【问题标题】:How to properly communicate different stages in a CI/CD pipeline如何正确沟通 CI/CD 管道中的不同阶段
【发布时间】:2019-11-19 05:13:10
【问题描述】:

我正在努力使工作成为一个在阶段之间具有依赖关系的简单 CI/CD 管道。这是我的.gitlab-ci.yml 文件:

image: gcc

stages:
    - build
    - test

build_app:
  stage: build
  script:
    - make
    - make install

test_app:
  stage: test
  script:
    - run app ...
  dependencies:
    - build_app

因此构建阶段将编译应用程序并将其安装在 /usr/local/bin/ 下。上面的例子会失败,因为测试阶段没有找到可执行文件,即使它在构建步骤中声明为dependent(默认情况下似乎没有附加)。

如果我将/usr/local/bin/app 定义为artifact,它也会失败,因为它们必须是$CI_PROJECT_DIR (reference) 的相对子级。

所以我现在正在尝试对其进行一些修改,但我觉得我并不真正了解那里发生了什么。我终于尝试将在存储库目录中编译的文件(APP)附加为工件(不使用 make install),并调用该二进制文件进行测试(例如,./APP 而不是APP)。这样就可以了,但我觉得我不得不放弃 make install 指令,而且可能有更好更直接的方法来实现它。

是否有推荐的方法来执行此任务?

【问题讨论】:

  • 您尝试使用cache 吗?这是 nodejs 的example

标签: gitlab gitlab-ci


【解决方案1】:

cache 也不起作用。它被限制(尽管没有记录)与工件相同的限制。

这些都是安全措施,否则它会提供对安装 gitlab-ci-runner 的整个文件系统的访问权限。

解决方案是将二进制文件安装在相对于您的构建目录的路径中,而不是 /usr/local/bin/app 并使用 artifacts

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多