运行 使用 Jenkins 在 Docker 容器内进行测试
Run tests inside Docker container with Jenkins
我们想尝试使用 Jenkins 为我们的项目设置 CI/CD。该项目本身具有 Elasticsearch 和 PostgreSQL 作为 运行 时间依赖项和用于验收测试的 Webdriver。
在开发环境中,一切都在一个 docker-compose.yml
文件中设置,我们有 acceptance.sh
脚本来 运行 验收测试。
在挖掘文档后,我发现可以通过以下步骤构建 CI:
- docker调整项目
- 从 git 仓库中拉取项目
- 以某种方式拉
docker-compose.yml
和项目 Dockerfile
- 要么:
- 放在项目仓库中
- 将它放在单独的 repo 中(现在就是这样做的)
- 放在服务器上的某个地方然后直接复制过来
- 执行
docker-compose up
- 项目的 Dockerfile 将有
ONBUILT
部分到 运行 测试。单元测试是 运行 到 mix tests
和接受到 scripts/acceptance.sh
。并行 运行 它们会很酷。
- 关闭
docker-compose
,清理容器
因为这是我第一次使用 Jenkins,所以出现了一系列问题:
- 这是一个可行的策略吗?
- 如何将测试输出与 Jenkins 连接?
- 如何 运行 和关闭 docker-compose?
- 我们 need/want 是否为此编写管道?当我们在下一阶段进入 CD 时,我们会 need/want 流水线吗?
谢谢
Is this a viable strategy?
是的。我认为在项目回购中包含 docker-compose.yml
和 Dockerfile
会更好。这样,任何更改都与使用这些更改的代码版本相关联。如果它在外部仓库中,则更改起来会变得更加困难(除非您以某种方式固定 git sha,例如使用子模块)。
project's Dockerfile will have ONBUILD
section to run tests
我会避免这种情况。只需将不同的命令设置为 运行 容器中的测试,而不是在构建时。
How to connect tests output with Jenkins?
Jenkins 仅使用构建步骤的退出状态,因此只要测试脚本以非零代码退出失败和零代码成功,这就是您所需要的。打印到 stdout/stderr 的测试输出将从 jenkins 控制台可见。
How to run and shut down docker-compose?
我会推荐给 运行 撰写:
docker-compose pull # if you use images from the hub, pull the latest version
docker-compose up --build -d
在 post-build 步骤中关闭:
docker-compose down --volumes
Do we need/want to write a pipeline for that?
不,我觉得一份工作就可以了。首先通过简单的设置让它工作,然后你可以弄清楚你需要什么来拆分成不同的工作。
我们想尝试使用 Jenkins 为我们的项目设置 CI/CD。该项目本身具有 Elasticsearch 和 PostgreSQL 作为 运行 时间依赖项和用于验收测试的 Webdriver。
在开发环境中,一切都在一个 docker-compose.yml
文件中设置,我们有 acceptance.sh
脚本来 运行 验收测试。
在挖掘文档后,我发现可以通过以下步骤构建 CI:
- docker调整项目
- 从 git 仓库中拉取项目
- 以某种方式拉
docker-compose.yml
和项目Dockerfile
- 要么:- 放在项目仓库中
- 将它放在单独的 repo 中(现在就是这样做的)
- 放在服务器上的某个地方然后直接复制过来
- 执行
docker-compose up
- 项目的 Dockerfile 将有
ONBUILT
部分到 运行 测试。单元测试是 运行 到mix tests
和接受到scripts/acceptance.sh
。并行 运行 它们会很酷。 - 关闭
docker-compose
,清理容器
因为这是我第一次使用 Jenkins,所以出现了一系列问题:
- 这是一个可行的策略吗?
- 如何将测试输出与 Jenkins 连接?
- 如何 运行 和关闭 docker-compose?
- 我们 need/want 是否为此编写管道?当我们在下一阶段进入 CD 时,我们会 need/want 流水线吗?
谢谢
Is this a viable strategy?
是的。我认为在项目回购中包含 docker-compose.yml
和 Dockerfile
会更好。这样,任何更改都与使用这些更改的代码版本相关联。如果它在外部仓库中,则更改起来会变得更加困难(除非您以某种方式固定 git sha,例如使用子模块)。
project's Dockerfile will have
ONBUILD
section to run tests
我会避免这种情况。只需将不同的命令设置为 运行 容器中的测试,而不是在构建时。
How to connect tests output with Jenkins?
Jenkins 仅使用构建步骤的退出状态,因此只要测试脚本以非零代码退出失败和零代码成功,这就是您所需要的。打印到 stdout/stderr 的测试输出将从 jenkins 控制台可见。
How to run and shut down docker-compose?
我会推荐给 运行 撰写:
docker-compose pull # if you use images from the hub, pull the latest version
docker-compose up --build -d
在 post-build 步骤中关闭:
docker-compose down --volumes
Do we need/want to write a pipeline for that?
不,我觉得一份工作就可以了。首先通过简单的设置让它工作,然后你可以弄清楚你需要什么来拆分成不同的工作。