当前位置: 首页 > 知识库问答 >
问题:

在项目上为两个不同的Docker映像运行Gitlab CI

祁权
2023-03-14

我们有一个集成在本地Gitlab安装上的小型C项目。QA(通过预期输出的shell脚本进行的本地单元测试)是通过完成的。gitlab-ci.yml带有特定的Docker映像(映像: ubuntu: artful)。由于细微的差异,我们希望在图像上运行相同的测试: debian:拉伸,这当然需要CI配置中的细微差异。

我目前正在做的是用自己的维护一个单独的分支。gitlab ci。yml,它在图像部分有所不同,在不同阶段的主体中也有细微差异(不同的包到apt get等)。这意味着我需要经常将master重设到该分支中,并确保手动合并对ci配置的更改。

这并不好:在我以前的生活中,我使用詹金斯,在那里我可以很容易地在实际回购之外维护不同的CI设置(我完全明白GitLab解决了将CI配置本身置于版本控制之下的问题)。

我想我可以解决两个分支之间gitlab配置中的所有小差异,变量取决于我所在的分支,除了docker映像。

我看到了两种不同的解决方案来避免仅出于CI目的而维护这两个分支:1)让Gitlab维护人员安装一个具有所需映像的VM,并注册一个特定的附加运行程序,或者2)在主分支上使用一个调度管道,我可以将映像名称作为参数传入。

解决方案1)对我来说似乎是最干净的,但我无能为力(仍然需要对gitlab ci配置中的变量进行特殊的大小写/泛化)。有没有其他方法可以在一个项目中运行多个gitlab ci配置而无需太多麻烦?


共有1个答案

柴宝
2023-03-14

嗯,还有第三种选择,但根据您进行的测试数量,它可能不会更干净。Yaml支持锚定,因此您可以为每个测试定义一个模板,然后执行两个实例。优点包括两组测试在同一个管道中并行运行,缺点是可能会变得混乱,如果其中一个失败,管道将停止。

.job_template: &job_definition
  stage: test  
  services:
    - postgres
    - redis
  script:
    - run tests

test_a:
  <<: *job_definition
  image: ubuntu:artful
  variables:
     SOME_VAR: "override variable"

test_s:
  <<: *job_definition 
  image: debian:stretch
  before_script:
    - do some special preparations
 类似资料:
  • 问题内容: 我有一个Docker映像,它是一个node.js应用程序。该应用程序从本地运行的Redis检索一些配置值。因此, 我试图在Docker映像内的同一容器内安装和运行Redis。 如何扩展Docker文件并在其中配置Redis? 到目前为止,Dockerfile如下: 从节点:碳 WORKDIR / app COPY package.json / app 运行npm安装 复制。/ app

  • 我有一个Docker映像,它是一个Node.js应用程序。应用程序从本地运行的Redis检索一些配置值。因此,我试图在Docker映像的同一容器中安装和运行Redis。 我如何扩展Docker文件并在其中配置Redis? 截至目前,Dockerfile如下所示:

  • 假设我在同一个公共Docker映像上安装了一个Web服务器和一个数据库服务器,是否可以同时运行它们,就像它们在同一个虚拟机中运行一样? 它正在运行<代码>docker run吗

  • 我有一个GitHub项目(我正在使用它(我没有创建它)),名为OpenRefine,我想将其封装在Docker映像中,这样其他人就可以从“Docker Hub”中提取该Docker映像,并将OpenRefine安装在他们的基本交互Docker实体上,即。形象 然后我想将它上传到一个我可以与其他人共享的存储库。 如果它有一个名字,而不是一个疯狂的散列值,那就好了。 是不是我用命令创建了一个“dock

  • 我如何在k8s中拉私人映像并使用它? 这是我的yaml for pod 日志为:-container“privaterePo”在pod“privaterePo”正在等待启动:尝试拉映像但失败

  • 当我在 2 台 Debian 服务器上运行 Docker 雄猫管理器时,我有以下 2 个显示器: Tomcat1:https://i.stack.imgur.com/kucJQ.png Tomcat2:https://i.stack.imgur.com/ygOCh.png Tomcat状态内存池以不同的名称列出,如“PS 两个容器以相同的方式运行: 使用相同的参数 xml 文件: 和 两台服务器的