【问题标题】:Run tests inside Docker container with Jenkins使用 Jenkins 在 Docker 容器中运行测试
【发布时间】:2016-07-28 10:57:24
【问题描述】:

我们想尝试使用 Jenkins 为我们的项目设置 CI/CD。该项目本身具有 Elasticsearch 和 PostgreSQL 作为运行时依赖项以及用于验收测试的 Webdriver。 在开发环境中,所有内容都设置在一个 docker-compose.yml 文件中,我们有 acceptance.sh 脚本来运行验收测试。

在挖掘文档后,我发现可以通过以下步骤构建 CI:

  1. 码头化项目
  2. 从 git repo 拉取项目
  3. 不知何故拉docker-compose.yml 和项目Dockerfile - 要么:
    • 放入项目仓库
    • 把它放在单独的仓库中(现在就是这样)
    • 放在服务器的某个地方,然后直接复制过来
  4. 执行docker-compose up
  5. 项目的 Dockerfile 将有 ONBUILT 部分来运行测试。单元测试通过mix tests 运行并通过scripts/acceptance.sh 接受。并行运行它们会很酷。
  6. 关闭docker-compose,清理容器

因为这是我第一次接触 Jenkins,所以出现了一系列问题:

  • 这是一个可行的策略吗?
  • 如何将测试输出与 Jenkins 连接?
  • 如何运行和关闭 docker-compose?
  • 我们是否需要/想要为此编写管道?当我们将在下一阶段获得 CD 时,我们是否需要/想要管道?

谢谢

【问题讨论】:

  • 是的,这是一个可行的策略。但它需要在 docker 内部运行 docker,这是一种相当先进的技术。你可以在Docker book这里找到更多信息dockerbook.com
  • 嗨,Miad!谢谢你的参考,我一定会去看看这本书!该插件可能有助于使用 docker go.cloudbees.com/docs/cloudbees-documentation/cje-user-guide/… 吗?
  • 尚未检查。可能值得一试

标签: jenkins docker docker-compose


【解决方案1】:

这是一个可行的策略吗?

是的。我认为在项目回购中包含docker-compose.ymlDockerfile 会更好。这样,任何更改都与使用更改的代码版本相关联。如果它在外部 repo 中,则更改变得更加困难(除非您以某种方式固定 git sha,例如使用子模块)。

项目的 Dockerfile 将有 ONBUILD 部分来运行测试

我会避免这种情况。只需设置一个不同的命令来在容器中运行测试,而不是在构建时。

如何将测试输出与 Jenkins 连接起来?

Jenkins 仅使用构建步骤中的退出状态,因此只要测试脚本以非零代码退出并且成功时代码为零,这就是您所需要的。从 jenkins 控制台可以看到打印到 stdout/stderr 的测试输出。

如何运行和关闭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

我们需要/想要为此编写管道吗?

不,我认为只有一份工作就可以了。首先通过简单的设置让它工作,然后你可以弄清楚你需要什么来分割不同的工作。

【讨论】:

  • "Jenkins 只使用构建步骤中的退出状态,因此只要测试脚本以非零代码退出,成功时代码为零,这就是您所需要的。测试输出打印到标准输出/标准错误将从詹金斯控制台可见。”我遇到了一个问题,即创建一个 xml 文件作为运行测试的副作用,但它位于容器内部,需要将其取出。我已经尝试将它创建的目录批量安装到詹金斯工作区,但它似乎没有出现。这里有什么想法吗?
  • 我建议使用docker cp 来获取文件。
  • 但是 docker run 完成后容器不再运行
猜你喜欢
  • 2018-02-08
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2020-03-29
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
相关资源
最近更新 更多