首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Gitlab runner上执行基本容器

如何在Gitlab runner上执行基本容器
EN

Stack Overflow用户
提问于 2019-11-15 12:23:28
回答 1查看 132关注 0票数 0

我正在开发一个使用容器环境的CI/CD管道。

  • 在我的笔记本电脑上,所有的东西都在包含我所有工具的centos容器中运行,而代码和配置驻留在共享卷上。
  • 当我提交时,大部分共享卷都会被推上主卷。
    • 但是,例如,我将任何python二进制文件排除在虚拟环境之外。

  • 在Gitlab中,这个容器被用作我的“基本”容器,以执行我的一些运行阶段,以便。
    • 执行代码和ansible配置的静态lint测试。
    • 用ansible-bender将最终产品打造成新的形象。

为了区分环境,我在entrypoint.sh中使用了一个基本的shell,当容器出现时执行它,在这个shell中,我使用了一个由Gitlab管理的环境变量:CI_JOB_STAGE。但是,当我在本地运行容器时,shell脚本的执行方式似乎与在运行者上的情况不同。这太疯狂了,因为这就是集装箱的全部意义,不是吗?

  • 目前还不清楚Gitlab在什么时候安装了运行主机和容器之间的共享
  • 测试值CI_JOB_STAGE的条件似乎不起作用,即使在输出值和输出echo时显示了值
  • 由于某些原因,入口点在执行阶段之后执行。

我是为

  • entrypoint.sh脚本
  • 容器在本地运行时的输出。
    • 在本例中,通过检查激活二进制文件是否存在,可以看到虚拟env已经存在,因此只需激活环境即可。
    • 然后检查烧瓶二进制文件,看看是否需要安装需求。
    • 我知道这很原始,但这只是POC

  • 转轮的第一阶段的输出
    • 基于shell脚本,它不应该安装这些需求,因为这无论如何都是舞台命令的一部分。
    • 我不相信它真的这么做,因为它走得太快了,但是信息表明它已经通过了这个条件。
    • if [[ $CI_JOB_STAGE -eq "locally" ]] && ! test -f "./env/bin/flask"
      • 如果这个阶段是局部的(错误:我们清楚地看到这个阶段是lint_code)
      • 烧瓶不存在(嗯,不会的,但没关系,因为上半部分已经是假的)

各个阶段仍然运行正常,但我觉得这一切都很令人困惑。有谁知道这些跑步者是如何执行的吗?

文科

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 14:13:23

Gitlab支持遗嘱执行人数目,它们的行为可能略有不同(执行器可能会挂载自定义卷,禁止特权容器)

通用工作流是:

  1. 准备:创建并启动服务。
  2. 预任务:克隆、恢复缓存和从前几个阶段下载工件.这是在一个特殊的码头形象运行。
  3. 工作:用户生成。这是在用户提供的Docker映像上运行的。
  4. 后期工作:创建缓存,将工件上传到GitLab。这是在一个特殊的码头形象运行。

我不想在entrypoint.sh中编写脚本。尝试将其重写为.gitlab-ci.yml

代码语言:javascript
复制
stages:
  - install
  - build
  - test

job 0:
  stage: .pre
  script: install some prerequisites 

job 1:
  stage: install
  script:
    - python3 -m venv env
    - source ./env/bin/activate
    - pip install -r ./dev/requirements.txt

job 2:
  stage: build
  script: make build

job 3:
  stage: test
  script: make test

它将使构建可复制和易于阅读。您可以使用阶段,只需确保您使用的是Gitlab >= 12.4。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58877007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档