问题标签 [jenkins-docker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - 无法启动临时 Windows 从站 - 无法拉取映像:无法在此平台上使用映像操作系统“windows”
我试图为一个简单的 windows-slave 创建一个 docker 模板,该模板必须与使用 linux-slave 映像的已定义模板一起工作。但是,我遇到以下错误:
架构简述:
集群运行在 Docker Swarm 18.09.1 上,节点组成为:
- 3 Linux 管理员
- 1 个 Linux 工作者
- 1 个 Windows 工作者
jenkins 版本是config.xml
中的 2.150.2
Cloud 部分:
我正在处理的多操作系统 docker swarm 是使用特定于平台的标签配置的(请参阅此线程的最后一条评论以供参考)。Bellow 是 windows worker 节点配置的相关子集:
此外,我已经成功地将奴隶部署为服务,并看到它被分派到正确的机器上。该服务的配置如下:
任何帮助,将不胜感激。
jenkins - 获取 Jenkins docker slaves 的映射端口作为管道参数
我们想切换到一个新的 Jenkins(版本 2.176.1),其中从站在 docker 云中按需启动(使用 docker 插件)。
如何在云中启动一个代理,具有特定的端口映射,不会与同一云中的其他容器发生冲突,但可以在管道脚本中进一步使用?
旧设置
我们当前的 jenkins 不以任何方式使用 docker,节点始终在运行。Web 项目的通常构建过程使用 maven。在某些时候,应用程序使用 maven cargo 插件启动。使用硒网格执行硒测试。正在运行的 Web 项目的外部端口在每个 jenkins 从站上配置。
目标
使用按需 docker 容器作为从站运行此设置,仍然使用外部工具。
问题
测试项目的基本构建工作,问题在于硒部分。
使用一个端口映射对一个容器有效,当然如果我们同时运行更多会发生冲突。
首先,我们尝试使用来自 docker 插件的全局 docker 代理模板中的端口范围。这允许启动多个容器,但是我们在管道脚本中没有找到实际使用的端口的参数,因此无法为测试设置它。
包括进一步的尝试agent{ docker{ image 'my_image' args '-p...'} }
或来自此处的“sidecar”方法https://jenkins.io/doc/book/pipeline/docker/并在容器启动时设置端口,使用 EXECUTOR_NUMBER 参数使端口唯一。在这两种情况下,jenkins 都会尝试在代理容器中启动另一个容器。这为时已晚,因为代理容器的映射端口在创建容器后无法更改。和 n
使用类似 docker inspect
from with a running slave 的方法失败了,因为我们也不知道当前的容器 ID。更新见下文
那么我们如何启动一个从属服务器,将一组已知的 docker 内部端口映射到主机上的一组端口,而不与其他 docker 代理发生冲突,并且仍然知道构建脚本中使用了哪些端口,也就是。詹金斯文件?
更新/解决方法
首先,可以使用环境变量获取容器的 ID DOCKER_CONTAINER_ID
。另一种方法是当前节点的主机名,因为这也是容器 ID,可以在脚本中解析。
结果行如下所示:
HTTP_PORT = (sh(script: 'docker -H tcp://${BIDGE_IP}:4243 inspect --format=\'{{(index (index .NetworkSettings.Ports \"8080/tcp\") 0).HostPort}}\' `hostname` ', returnStdout: true)).trim()
该变量${BRIDGE_IP}
在 jenkins 全局变量中定义,是运行 docker 引擎的主机的 docker 网络 ip。
docker - 如何 docker pull 到特定的服务器?
我最近开发了一个 Jenkins 管道,它可以构建和推动多个项目。现在,我需要将构建的图像拉到特定的服务器上。如,假设服务器“A”是我的构建服务器,服务器“B”是我需要将构建图像拉到的地方。我知道我可以去服务器 B 并从 Docker hub 执行 docker pull。但是有没有一种方法可以自动化这个过程,将构建的图像拉到同一个 Jenkins 管道中的特定服务器?还是有任何可行的方法来实现这一目标?
docker - 在 jenkins docker 映像中安装插件失败
我有一个自定义 Jenkins master 的 Dockerfile,如下所示:
我预计插件将在 docker build 命令期间安装
docker build --no-cache -t jenkins .
但是 install-plugins.sh 无法安装插件
docker - 在 Jenkins-Docker 容器中使用的 Docker SMTP 容器
本主题是关于 Docker 网络的,我无法允许 dockerised Jenkins 使用 dockerised SMTP 服务器。
以下是我运行容器并将它们连接到用户定义的网络的方式,以便容器的名称可以用作目标主机:
在我的 jenkins 容器中,我可以通过默认的“桥”网络访问 smtp 服务:
我也可以通过我的用户定义的网络访问它,包括 IP 和主机名:
到现在为止还挺好。
但是,在 Jenkins > 管理 Jenkins > 配置系统 > 电子邮件通知中,尝试使用测试电子邮件发送工具给我以下结果:
=> 电子邮件已发送并已正式收到!
=> 发送电子邮件失败 com.sun.mail.smtp.SMTPAddressFailedException: 550 relay not allowed
=>同样的错误
为什么使用 2 个网络时 SMTP 服务器的行为不同?
我对 Docker 网络缺少什么?
编辑:所以快速的解决方案是使用 --network 选项运行 smtp 容器,而不是运行它然后将其连接到网络。有关更多详细信息和充分性,请参阅下面的 Stefano 的答案。
api - 使用 Jenkins Docker 插件动态创建的 Jenkins Slave 在作业执行过程中被删除
我正在使用 Jenkins-Docker-Plugin https://wiki.jenkins.io/display/JENKINS/Docker+Plugin来动态创建容器并将它们用作 Jenkins Slaves。这对于某些工作来说效果很好。然而,对于一些运行时间较长的作业(10 分钟 >),docker 容器会在中途被移除。制作作业失败。
我尝试在插件配置中增加各种超时选项,但是没有结果。任何人都可以请帮忙。
docker - Jenkins 脚本化管道,带有用于测试的 Sidecar MYSQL 容器
我有下面的管道,它将与 MYSQL 容器一起运行实际容器来运行测试。
我被以下错误困住了
以防万一您想查看 rds-test dockerfile https://github.com/epynic/rds-mysql-s3-backup/tree/feature
security - Jenkins 下载构建时间依赖项
目前所有 Jenkins 服务器,无论是主节点还是节点都具有广泛开放的互联网访问权限。我们的安全团队正试图通过要求 Jenkins 管理团队提供 Jenkins 正在访问的 DNS/IP 来缩小这些服务器上的互联网访问范围。这里最大的问题是我们不知道在构建代码时它正在访问什么公共 IP,即使我们正在设置一个新的构建作业它会因为防火墙而在此构建失败时获取构建时间依赖项?知道解决这个问题的最佳解决方案是什么吗?
jenkins-pipeline - 用于构建升级的 Docker 映像重新标记
我正在尝试使用 Jenkins docker 插件在我的 Jenkins 管道中推广 docker 映像,但我能够这样做,因为我遇到了以下错误。
我可以在日志中看到以下内容
管道代码:
知道这里有什么问题...
编辑#1:如果我遵循我会得到不同的错误。
错误:
docker - 如何将容器参数传递给詹金斯码头云模板
我正在为 Jenkins 使用 Docker 插件。
当我使用 docker 模板配置新的 docker cloud 时,一切都按预期工作(Jenkins 分离了一个容器并完成了这项工作),但现在我有一个需要更多磁盘空间的新构建作业,而我的作业失败:“磁盘空间不足”容器。
我想将 --storage-opt size=15G 添加到 Jenkins 的 docker 模板中,以允许 docker 大于其默认的 10G。不幸的是,无论我尝试什么,它都没有响应,在某些情况下,它失败并出现错误:
我错过了什么,我应该如何传递论点?谢谢!