与Jenkins在Docker容器中运行testing

我们想给它一个尝试与jenkins为我们的项目设置CI / CD。 该项目本身具有Elasticsearch和PostgreSQL作为运行时依赖性和Webdriver进行验收testing。 在开发环境中,一切都在一个docker-compose.yml文件中设置,我们有acceptance.sh脚本来运行验收testing。

挖掘文档后,我发现可能可以通过以下步骤来构buildCI:

  1. dockerize项目
  2. 从git回购项目拉
  3. 以某种方式拉docker-compose.yml和项目Dockerfile – 或者:
    • 把它放在项目回购
    • 把它放在单独的回购(这是现在这样做)
    • 放在服务器上的某个地方,只是把它复制过来
  4. 执行docker-compose up
  5. 项目的Dockerfile将有ONBUILT部分来运行testing。 unit testing通过mix tests和接受通过scripts/acceptance.sh 。 平行运行它们会很酷。
  6. closuresdocker-compose ,清理容器

因为这是我与jenkins的第一次经历,出现了一系列的问题:

  • 这是一个可行的策略吗?
  • 如何连接与Jenkins的testing输出?
  • 如何运行和closuresdocker-compose?
  • 我们是否需要/想为此写一条pipe道? 当我们在下一个阶段到达CD时,我们是否需要/需要pipe道?

谢谢

这是一个可行的策略吗?

是的。 我认为在项目回购中包含docker-compose.ymlDockerfile会更好。 这样,任何更改都与使用更改的代码版本相关联。 如果是在外部的回购,它变得很难改变(除非你用别的模块固定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道?

不,我认为只有一个工作是好的。 先用一个简单的设置工作,然后你可以找出你需要分解成不同的工作。