我们想尝试使用 Jenkins 为我们的项目设置 CI/CD。该项目本身具有 Elasticsearch 和 PostgreSQL 作为运行时依赖项以及用于验收测试的 Webdriver。
在开发环境中,一切都设置在一个 docker-compose.yml
文件,我们有 acceptance.sh
运行验收测试的脚本。
在挖掘文档后,我发现可以通过以下步骤构建 CI:
docker-compose.yml
和项目Dockerfile
- 任何一个:docker-compose up
ONBUILT
部分运行测试。单元测试通过 mix tests
运行并通过scripts/acceptance.sh
接受.并行运行它们会很酷。 docker-compose
,清理容器因为这是我第一次接触 Jenkins,所以出现了一系列问题:
谢谢
最佳答案
Is this a viable strategy?
是的。我认为最好包含
docker-compose.yml
和 Dockerfile
在项目 repo 中。这样,任何更改都与使用更改的代码版本相关联。如果它在外部仓库中,则更改变得更加困难(除非您以某种方式固定 git sha,例如使用子模块)。project's Dockerfile will have
ONBUILD
section to run tests
我会避免这种情况。只需设置一个不同的命令来在容器中运行测试,而不是在构建时。
How to connect tests output with Jenkins?
Jenkins 只使用构建步骤中的退出状态,因此只要测试脚本以非零代码退出,成功代码为零,这就是您所需要的。从 jenkins 控制台可以看到打印到 stdout/stderr 的测试输出。
How to run and shut down docker-compose?
我会推荐这个来运行 Compose:
docker-compose pull # if you use images from the hub, pull the latest version
docker-compose up --build -d
在构建后关闭步骤中:
docker-compose down --volumes
Do we need/want to write a pipeline for that?
不,我认为只有一份工作就可以了。首先通过简单的设置让它工作,然后你可以弄清楚你需要什么来分割不同的工作。
关于jenkins - 使用 Jenkins 在 Docker 容器中运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38634371/