gpt4 book ai didi

Docker Compose 作为 CI 管道

转载 作者:行者123 更新时间:2023-12-05 06:27:08 24 4
gpt4 key购买 nike

所以我们使用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

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

任何人都知道任何技巧可以更好地控制 docker 认为完成的内容。我研究过的所有解决方案都使用某种包装器脚本,该脚本监视内部 docker 网络上的某个端口以等待服务(如数据库)完全打开并准备就绪。

当使用 k8s 时,我可以设置一个非常棒的就绪探测器,尽管它似乎不是 Docker Compose 的一个特性。我错了吗?最好只写一个命令,让 docker 用来确定 done 的含义。

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

docker-compose up install

等等……

docker-compose up test

我们真的只想说:

docker-compose up

并等待前面的步骤以正确的顺序完成所有步骤。

最佳答案

我遇到了同样的问题,当您从本地计算机映射到 docker 时,这是与权限相关的事情。

volumes:
- .:/home/node:Z

在容器内创建一个文件,并在你的本地机器上检查这个文件的权限,如果你看到 root 用户或其他任何东西是所有者,而不是你当前的用户,你必须先运行

export DOCKER_USER="$(id -u):$(id -g)"

和改变

user: node

通过

user: $DOCKER_USER

PS:我假设你可以运行 docker 而不必使用 sudo,只是提到这个 bc 这是我的场景。

关于Docker Compose 作为 CI 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55543220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com