在从代码库中的 dockerfile 构建的 Docker 容器中运行 Jenkins 测试

2024-01-01

我想部署一个基于Jenkins的持续集成平台。由于我有各种类型的项目(PHP / Symfony、node、Angular 等),并且我希望这些测试既可以在本地运行,也可以在 Jenkins 上运行,所以我正在考虑使用 Docker 容器。

我的目标过程是:

  • 在 Github / Gitlab 上打开合并请求
  • Webhook 通知 Jenkins 合并请求
  • Jenkins 提取存储库、构建容器并运行 shell 脚本来执行测试
  • 测试完成后,Jenkins 从其中一个容器检索结果(通过共享卷)并处理结果。

我不希望詹金斯在容器中。

通过这种过程,我希望能够在每台开发人员机器上轻松运行测试,例如docker-composer up然后在其中一个容器中./tests all.

我对詹金斯不太熟悉。我读过很多文档,但大多数文档都建议预先为每种项目定义 Jenkins 从属。我希望一切都尽可能动态,并且需要 Jenkins 上的配置尽可能少。

如果您曾经实现过类似的东西,我将不胜感激您的测试过程的描述。如果您认为我的目标是不可能的,如果您能向我解释原因,我也将不胜感激。


我建议的设置是 Docker in Docker。

基础是派生的 Docker 映像,它扩展了詹金斯:2.x https://hub.docker.com/_/jenkins/通过添加 Docker 命令行客户端来生成镜像。 Jenkins 作为一个容器启动,其主文件夹(例如从 Docker 主机安装的 /var/jenkins_home 文件夹)和 Docker 套接字文件能够从 Jenkins 构建作业启动 Docker 容器。

docker run -d --name jenkins -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock ... <yourDerivedJenkinsImage>

要检查此设置是否有效,只需在启动 Jenkins 容器后执行以下命令:

docker exec jenkins docker version

如果“docker版本”输出是NOT show:

docker 守护进程是否在此主机上运行?

一切安好。

在构建作业中,您可以配置上面提到的过程。让 Jenkins 简单地检查一下存储库。存储库应包含您的构建和测试脚本。

使用带有 shell 执行的自由式构建作业。 shell 执行可能如下所示:

docker run --rm --volumes-from jenkins <yourImageToBuildAndTestTheProject> bash $WORKSPACE/<pathToYourProjectWithinTheGitRepository>/build.sh 

此命令只是使用 jenkins 中的卷启动一个新容器(以构建和/或测​​试您的项目)。这意味着克隆的存储库将在 $WORKSPACE 下可用。因此,如果您运行“bash $WORKSPACE//build.sh”,您的项目将在“yourImageToBuildAndTestTheProject”的容器中构建。运行此命令后,您可以启动其他容器进行集成测试,或者通过将其安装在派生的 Jenkins 映像上,将其与“docker-compose”结合起来。

优点是 Jenkins 中的配置工作量最少 - 只需要用于克隆 GIT 存储库的 SCM 配置。由于每个 Jenkins 作业都直接使用 Docker 客户端,因此您可以为每个项目使用一个或 Docker 映像来构建和/或测​​试,WITHOUT进一步的詹金斯配置。

如果您需要额外的配置,例如SSH 密钥或 Maven 设置,只需将它们放在 Docker 主机上,然后使用包含这些配置文件的附加卷启动 Jenkins 容器。

在构建作业的 shell 执行中使用此 Docker 选项:

--volumes-from jenkins

自动将工作区和配置文件添加到每个构建作业中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在从代码库中的 dockerfile 构建的 Docker 容器中运行 Jenkins 测试 的相关文章

  • 更改Docker容器中的mysql密码

    我如何更改 docker 容器中的 root 密码 因为一旦我停止 mysql 服务 容器就会自动停止 我应该停止 mysql 容器并部署一个新容器吗 您可以使用正在运行的容器更改它docker exec session https doc
  • Espresso - 检查使用按钮按下意图打开哪个活动?

    是否可以跟踪按下某个按钮后打开了哪个 Activity 我有一个测试 其中当单击 按下按钮时 it 向服务器发送请求 直到发送请求时 它打开一个活动 验证是否执行成功在测试中 我需要检查打开的 Activity 是什么 我的测试示例 检查
  • 使用 RSpec 进行 Rails 片段缓存测试

    我觉得这是一个没有太多记录的主题 至少我在这里找到最佳实践时遇到了很多麻烦 我使用 cache key 在视图中进行片段缓存 tbody employees each do employee cache employee do tr emp
  • 如何根据作业参数设置 Jenkins 环境变量?

    我有一个项目 需要根据用户选择的选择参数设置环境变量 每个项目都有一个主题项目依赖项 我想让用户选择项目 然后从属性文件加载主题名称 就像是 proj1 theme1 proj2 theme2 proj3 theme3 如果用户选择proj
  • 如何在启用 Hyper-V 的情况下使用 Kitematic?

    我已经安装了适用于 Windows 的 Docker 运行 Windows 10 开箱即用时 Docker 不会在 Hyper V 上安装映像 但我能够让它工作 Edit 我通过此屏幕上的链接获取了 Kitematic 单击下载后 我通过
  • 如何在浏览器中模拟纬度和经度值(用于地理位置测试)?

    我正在开发一个网络应用程序 它要求我在浏览器中模拟纬度和经度值以进行地理位置测试 有人有测试基于地理定位的应用程序的经验吗 提前致谢 伪造地理位置 您想要在 Firefox 中伪造您的位置的原因有很多 一个很好的理由是在没有无线局域网卡的计
  • OutputCapture 进行多次测试

    我正在使用 org springframework boot test OutputCapture 来测试记录某些内容的注释 它对于单个测试非常有效 当单独运行测试时 如果源文件中存在使用输出捕获的多个测试 但是当多个测试一起运行时 只有第
  • 如何在 MultiJob 插件中传递内部版本号?

    The 多作业插件 https wiki jenkins ci org display JENKINS Multijob Plugin很棒 我想将它用于我的构建过程 但之前有一个问题必须解决 有三个作业 A B 和 C SVN 触发作业 A
  • 使用 Groovy 从 Jenkins 主节点访问从节点上的文件

    我正在使用 Jenkins Build Flow 插件来实现并行化 Groovy DSL 执行某些文件操作 即使该选项Restrict where this project can be run设置为在特定从属设备上运行作业 DSL 在主控
  • 使用入口点脚本初始化 influxdb2 存储桶

    我正在部署用于存储实时数据的 influxdb 我已经使用 1 8 4 一段时间了 最 近决定更新到 v2 My docker compose yml文件看起来像这样 influxdb image influxdb 2 0 4 alpine
  • 如何使用 Magento 测试 cron?

    首先我需要了解 Magento cron 是如何工作的 我知道 cron 在 Linux 上如何工作 使用crontab e 我知道我需要设置 Magento 的 cron php 定期运行 但是当我在 magento 配置文件中定义 cr
  • 在 Dockerfile 中切换到 root 用户

    我运行了这个命令 docker pull mcr microsoft com mssql server 2019 latest 然后我创建了一个 dockerfile 来使用此容器映像作为另一个容器的基础映像 escape FROM mcr
  • jest 无限期挂起,不运行任何测试

    每次我运行 jest 时它都不会运行任何东西 我已经让计数器任意升高 我用 no cache 运行 jest jest debug 输出如下 configs automock false browser false cache true c
  • 如何在 Visual Studio 代码中的奇点/docker 图像中使用 python 解释器

    我希望能够在 Visual Studio 代码的奇点图像中使用 python 解释器 似乎将 VSCODE 指向 python 解释器的所有选项都涉及直接路径 但在图像中使用 python 需要一个命令 singularity exec p
  • Docker 容器是否有自己的 TCP/IP 堆栈?

    我试图了解来自连接到主机的线路并定向到 Docker 容器内的应用程序的网络数据包在幕后发生了什么 如果它是一个经典的 VM 我知道到达主机的数据包将由虚拟机管理程序 例如 VMware VBox 等 传输到 VM 的虚拟 NIC 并从那里
  • docker、nginx、django 以及如何提供静态文件

    目标 用于生产 django 网站部署的 docker 容器集 我在这个过程中遇到的问题是 通常 nginx 直接提供静态文件 根据我对使用 docker 的良好架构的理解 您将拥有一个用于 wsgi 服务器的容器 可能是gunicorn
  • docker环境下日志不保存到文件

    在我的生产环境中production rb 我已配置我的日志将保存到文件中 config logger Logger new log production log 当我在本地运行时 使用命令行启动服务器rails s e productio
  • 在 Jenkins API 中,有没有办法找到上次构建的 git 提交?

    我想编写一个脚本来自动创建热修复的功能分支 为了做到这一点 我需要弄清楚如何查看当前构建中的最后一次提交 有没有办法从 Jenkins API 获取最后一次提交 git checkout b hotfix
  • 如何在 Visual Studio 上关闭调试后访问在 docker 上运行的网站

    我在 net core 上构建了一个非常简单的 Web 应用程序和 Web api 并配置了 docker compose 以使它们能够通过同一网络正确通信 在 Visual Studio 上 当我在 Docker Compose 项目上运
  • 使用 Protractor 检查浏览器控制台中没有错误

    我正在使用 Protractor 来测试 AngularJS 我想检查在测试结束时是否没有发生未捕获的异常并打印到浏览器控制台 有没有一种简单的方法可以做到这一点 如果您将 Protractor 与 Jasmine 一起使用 请使用以下代码

随机推荐

  • 只读时无法使用文本框获取文本?

    我有一个文本框
  • CSS Line-Through 未被删除

    我有一些代码可以在 TR 上为已删除的行添加一条直通线 但这意味着我的 操作 列 只有 按钮会受到影响 这是因为按钮之间存在单独的空间 这些空间最终也会被贯穿 在浏览了 W3Schools 后 我很困惑为什么这个例子不起作用 table t
  • 如何设置 tkinter textvariable 在单独的线程上运行?

    尝试使用 main 函数变量更新在线程上运行的 tkinter textvariable 我实现了一个基于线程的解决方案 因此 tkinter 主循环后面的代码可以运行 https stackoverflow com a 1835036 1
  • 如何使用功能状态生成随机数?

    我正在努力弄清楚如何将 State 的函数表示与 Scala 的 Random 类合并以生成随机整数 我正在从书上学习Scala 中的函数式编程 所以大部分代码都是从那里获取的 以下是 State 类的样子 直接来自书中 case clas
  • 使用 NSIS 安装程序向注册表项授予权限的有效方法是什么?

    我正在尝试使用访问控制插件 http nsis sourceforge net AccessControl plug in在 NSIS 中设置注册表项的权限 它不起作用 安装程序运行后 所有用户组没有完全控制权 我在下面创建了一个示例 这里
  • Eclipse:有没有办法在组织导入中强制导入来解决歧义?

    我在 android 项目上使用 Eclipse 我更新到 Lion 问题开始出现 尝试了几个小时 没有结果 问题是这样的 我有几十个文件com stuff morestuff在我的项目中 我想 ctrl shift O 我的项目 这样每个
  • VS2010单元测试“待处理”且测试无法完成

    我正在使用 VS2010 Windows 7 每次我尝试运行单元测试时 它都会保持 待处理 状态并且测试无法完成 我试着遵循这个msdn说明 http msdn microsoft com en us library ms182532 28
  • Netflix 如何在不刷新页面且无需 JavaScript 的情况下提交评分?

    我正在尝试为我的网站做一些类似 Netflix 的 5 星级评级系统的事情 我注意到 Netflix 即使禁用了 JavaScript 仍然会在不刷新页面的情况下提交评级 这是显而易见的 因为当您手动重新加载页面时 您可以看到新的评级 但是
  • React-navigation 在调试模式下工作正常,但在发布模式下不行

    几周以来我遇到了一个问题 我在我的react native应用程序中使用react navigation 当我在调试模式下在我的设备上测试时 我在屏幕之间正确导航 但是当我构建签名的apk时 导航不再工作 我尝试了一切 但没有任何效果 我正
  • 在已知缺失时间间隔之间插入 3D 坐标

    数据是空间中的路径 我有 3D 位置数据 x y z 和记录位置点的时间 x y 和 z 坐标是物体在 3D 空间中移动的点位置 时间值是记录每个点的时间 从 0 开始 x y z time s 0 1 2 2 3 3 0 2 4 2 4
  • 为什么不在java中使用带有锁的try?

    我读了这个话题 https stackoverflow com questions 6965731 are locks autocloseable 和这个博客文章 http www java7developer com blog p 256
  • 编译时出现错误?

    当我编译代码时 我收到这些错误 我有 user include 下的所有标题 g Ip appmanager inc Icore inc p appmanager src appmanager process cpp o p appmana
  • 本地主机上的 404 错误

    我正在尝试使用一些ajax 来发送一些电子邮件 我在使用冷聚变之前已经这样做过并且没有任何问题 我遇到的是本地主机未在目录中找到明确的文件 事实上 该文件与index php 位于同一目录中 这没有发现任何问题 然而它给了我一个404错误找
  • 使用 LiveData、协程和事务测试 Android Room

    我想测试我的数据库层 但我陷入了第 22 条军规类型的情况 测试用例由两部分组成 保存一些实体 加载实体并断言数据库映射按预期工作 简而言之 问题在于 Insert is a suspend方法 这意味着它需要运行在runBlocking
  • Eclipse“正确缩进”忽略空格与制表符设置

    我正在 Windows 中运行 Eclipse Juno Service Release 2 20130225 0426 我发现自动缩进 Ctrl I 会忽略常规 编辑器 文本编辑器 插入选项卡空格和 Java 代码样式 格式化程序 缩进
  • “无处不在”使用 LINQ 时的性能问题?

    升级到 ReSharper5 后 它为我提供了更多关于代码改进的有用提示 我现在随处看到的一个提示是用 LINQ 查询替换 foreach 语句 举个例子 private Ninja FindNinjaById int ninjaId fo
  • 获取 Android 上的应用程序安装日期

    有没有办法找出 Android 设备上的 应用程序安装日期 进行了大量搜索 但无法找到相关答案 无法找到有关应用程序安装日期的任何信息PackageManager文档 代码 或这个 API 级别 9向上 long installed con
  • Z Shell“自动加载”内置 - 它有什么好处?

    我已经使用 Z shell 一段时间了 我开始感到好奇 我在编写自己的函数时偶然发现的一件事是 自动加载 根据 zshbuiltins 1 手册页autoload是 相当于functions u 有一个例外 它 相当于typeset f 有
  • Webkit 必须始终在主线程上使用吗?

    我试图在后台渲染网页 但遇到了以下麻烦 2012 05 11 12 39 02 086 77207 1c03 An uncaught exception was raised 2012 05 11 12 39 02 087 77207 1c
  • 在从代码库中的 dockerfile 构建的 Docker 容器中运行 Jenkins 测试

    我想部署一个基于Jenkins的持续集成平台 由于我有各种类型的项目 PHP Symfony node Angular 等 并且我希望这些测试既可以在本地运行 也可以在 Jenkins 上运行 所以我正在考虑使用 Docker 容器 我的目