与Jenkins在Docker容器中运行testing
我们想给它一个尝试与jenkins为我们的项目设置CI / CD。 该项目本身具有Elasticsearch和PostgreSQL作为运行时依赖性和Webdriver进行验收testing。 在开发环境中,一切都在一个docker-compose.yml
文件中设置,我们有acceptance.sh
脚本来运行验收testing。
挖掘文档后,我发现可能可以通过以下步骤来构buildCI:
- dockerize项目
- 从git回购项目拉
- 以某种方式拉
docker-compose.yml
和项目Dockerfile
– 或者:- 把它放在项目回购
- 把它放在单独的回购(这是现在这样做)
- 放在服务器上的某个地方,只是把它复制过来
- 执行
docker-compose up
- 项目的Dockerfile将有
ONBUILT
部分来运行testing。 unit testing通过mix tests
和接受通过scripts/acceptance.sh
。 平行运行它们会很酷。 - closures
docker-compose
,清理容器
因为这是我与jenkins的第一次经历,出现了一系列的问题:
- 这是一个可行的策略吗?
- 如何连接与Jenkins的testing输出?
- 如何运行和closuresdocker-compose?
- 我们是否需要/想为此写一条pipe道? 当我们在下一个阶段到达CD时,我们是否需要/需要pipe道?
谢谢
这是一个可行的策略吗?
是的。 我认为在项目回购中包含docker-compose.yml
和Dockerfile
会更好。 这样,任何更改都与使用更改的代码版本相关联。 如果是在外部的回购,它变得很难改变(除非你用别的模块固定git sha,比如使用子模块)。
项目的Dockerfile将有
ONBUILD
部分来运行testing
我会避免这一点。 只需设置一个不同的命令来在容器中运行testing,而不是在构build时。
如何连接与Jenkins的testing输出?
Jenkins只是使用构build步骤中的退出状态,所以只要testing脚本在失败时退出非零代码,并且成功为零代码就是您所需要的。 打印到stdout / stderr的testing输出将在jenkins控制台中可见。
如何运行和closuresdocker-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
我们是否需要/想为此写一条pipe道?
不,我认为只有一个工作是好的。 先用一个简单的设置工作,然后你可以找出你需要分解成不同的工作。