Docker Compose作为CI管道

时间:2019-04-05 20:53:13

标签: docker npm docker-compose continuous-integration

因此,我们使用Gitlab CI。问题是每次我们要测试是否正确配置构建管道时都必须提交的痛苦。不幸的是,当我们的容器/管道无法正常工作时,无法在本地轻松测试Gitlab CI。

我们的解决方案将docker-compose.yml用作CI管道运行程序,以对容器化构建步骤进行本地测试,为什么不知道。 。 。 ?基本上,Gitlab CI和大多数其他工具都让每个部分都生成一个容器来运行命令,并且直到前面的步骤完成后才继续执行,即第一步必须完全完成,然后再进行下一步。

这是我们使用的简单.gitlab-ci.yml文件:

stages:
  - install
  - test

cache:
  untracked: true
  key: "$CI_COMMIT_REF_SLUG"
  paths:
    - node_modules/

install:
  image: node:10.15.3
  stage: install
  script: npm install

test:
  image: node:10.15.3
  stage: test
  script: 
    - npm run test
  dependencies:
    - install

这是我们将其转换为的docker-compose.yml文件:

version: "3.7"
services:
  install:
    image: node:10.15.3
    working_dir: /home/node
    user: node
    entrypoint: npm
    command:
      - install
    volumes:
      - .:/home/node:Z
  test:
    image: node:10.15.3
    working_dir: /home/node
    user: node
    entrypoint: npm
    command:
      - run
      - test
    volumes:
      - .:/home/node:Z
    depends_on:
      - install

好,现在要解决真正的问题。撰写文件的depends_on部分不会等待install容器完成,而只是等待npm命令运行。因此,一旦npm命令正式加载并运行,test容器将开始运行,并抱怨还没有node_modules。发生这种情况是因为npm正在运行并不意味着npm命令实际上已经完成。

任何人都知道可以更好地控制docker认为done的任何技巧。我研究了所有解决方案,都在使用某种包装器脚本在哪里查看了内部docker网络上的某些端口,以等待诸如db的服务完全打开并准备就绪。

当使用k8s时,我可以设置一个超级掺杂的就绪探针,但是它似乎并不是Docker Compose的功能。我在这里错了吗?仅编写docker用于确定done含义的命令会很好。

目前,我们必须手动运行每个步骤,然后在完成上一步后运行下一个步骤,如下所示:

docker-compose up install

等待...。

docker-compose up test

我们真的只想说:

docker-compose up

,并通过等待前面的步骤来按正确的顺序完成所有步骤。

0 个答案:

没有答案