Jenkins入站代理的Docker镜像
[!重要] 该仓库已弃用,其内容现已包含在 https://github.com/jenkinsci/docker-agent/ 中。
自 https://github.com/jenkinsci/docker-agent/pull/570 以来,
agent
和inbound-agent
镜像都是从 https://github.com/jenkinsci/docker-agent/ 仓库构建的,这要归功于使用了多阶段Dockerfile和目标。更多详情请参见 https://github.com/jenkinsci/docker-agent/issues/569。
请注意,这并不会改变Docker Hub上的任何内容,这些镜像仍然有自己的Docker仓库
jenkins/agent
和jenkins/inbound-agent
。
:exclamation: 警告! 此镜像曾以 jenkinsci/jnlp-slave 和 jenkins/jnlp-slave 发布。 这些镜像已被弃用,请使用 jenkins/inbound-agent。
这是一个用于Jenkins代理的镜像,使用TCP或WebSockets建立与Jenkins主控器的入站连接。 该代理由Jenkins远程处理库提供支持,其版本取自基础Docker代理镜像。
更多信息请参见使用代理。
使用此容器镜像配置代理
在Jenkins上设置代理
- 进入Jenkins仪表板
- 在主菜单中选择"管理Jenkins"
- 在"系统配置"中选择"节点"项
- 在侧边菜单中选择"新建节点"
- 填写节点(代理)名称并选择类型;(例如,名称:agent1,类型:永久代理)
- 现在填写远程根目录、标签、执行器数量等字段
- "启动方法"为"通过将其连接到控制器来启动代理"
- 点击"保存"按钮,agent1将被注册,但暂时处于离线状态。点击它。
- 现在你应该能看到密钥。使用密钥值作为容器的参数传递,或将其设置为
JENKINS_SECRET
环境变量。
运行此容器
运行Docker容器
注意
记得将<secret>
和<agent name>
替换为你可以从上面的部分获取(和设置)的密钥和代理名称。
你的代理节点应该能够通过代理端口(不是Jenkins服务器的端口,如80、443、8080)连接到Jenkins控制器,该端口可以在"管理Jenkins" > "安全" > "代理"中设置。默认端口是50000。
Linux代理:
docker run --init jenkins/inbound-agent -url http://jenkins-server:port <secret> <agent name>
注意:--init
对于正确处理子进程(僵尸进程回收)是必要的
Windows代理:
docker run jenkins/inbound-agent:windowsservercore-ltsc2019 -Url http://jenkins-server:port -Secret <secret> -Name <agent name>
要运行带有工作目录的Docker容器
Linux代理:
docker run --init jenkins/inbound-agent -url http://jenkins-server:port -workDir=/home/jenkins/agent <secret> <agent name>
Windows代理:
docker run jenkins/inbound-agent:windowsservercore-ltsc2019 -Url http://jenkins-server:port -WorkDir=C:/Jenkins/agent -Secret <secret> -Name <agent name>
可选的环境变量:
JENKINS_JAVA_BIN
:要使用的Java可执行文件路径,而不是PATH中的默认路径或从JAVA_HOME获取的路径JENKINS_JAVA_OPTS
:用于远程处理过程的Java选项,否则从JAVA_OPTS获取,警告 :exclamation: 关于Windows用法的更多信息,请参见下面的Windows Jenkins Java选项部分。JENKINS_URL
:Jenkins服务器的URL,可以用作-url
选项的替代,或设置备用Jenkins URLJENKINS_TUNNEL
:(HOST:PORT
) 连接到此代理主机和端口,而不是Jenkins服务器,假设这个主机可以将TCP流量路由到Jenkins控制器。当Jenkins运行在负载均衡器、反向代理等后面时很有用。JENKINS_SECRET
:(仅在未作为参数设置时使用)在控制器上创建代理后显示的密钥JENKINS_AGENT_NAME
:(仅在未作为参数设置时使用)代理的名称,应与在控制器上创建代理时指定的名称匹配JENKINS_AGENT_WORKDIR
:代理工作目录,如果未通过可选参数-workDir
设置JENKINS_WEB_SOCKET
:如果连接应通过WebSocket而不是TCP建立,则设为true
JENKINS_DIRECT_CONNECTION
:(HOST:PORT
) 直接连接到此TCP代理端口,跳过HTTP(S)连接参数下载。JENKINS_INSTANCE_IDENTITY
:Jenkins控制器的InstanceIdentity字节数组的base64编码。设置此项时,代理将跳过连接到HTTP(S)端口以获取连接信息。JENKINS_PROTOCOLS
:指定提供JENKINS_INSTANCE_IDENTITY
时尝试的远程处理协议。
示例
- 输入上述命令。
- 检查Jenkins仪表板,确认代理是否连接正常。
Windows Jenkins Java 选项
JENKINS_JAVA_OPTS环境变量或-JenkinsJavaOpts命令行参数的处理遵循Powershell的命令解析语义。这意味着如果参数包含任何作为Powershell表达式一部分的字符,就需要用引号括起来。 例如:
-XX:+PrintCommandLineFlags --show-version
这需要用引号转义,像这样:
"-XX:+PrintCommandLineFlags" --show-version
或者另一个例子: -Dsome.property=some value --show-version
这需要这样转义:
"-Dsome.property='some value'" --show-version
配置细节
启用的JNLP协议
从3.40-1版本开始,此镜像仅支持JNLP4-connect协议。 早期的、长期不支持的协议已被移除。 因此,不再支持2.32版本之前的Jenkins。
Amazon ECS
在运行之前,请确保你的ECS容器代理已更新。旧版本无法正确处理entryPoint参数。有关更多信息,请参见entryPoint定义。