我如何使用 Jenkins docker-swarm-plugin(传递代理名称)来使用 docker 图像 jenkins/jnlp-slave
How can I user docker image jenkins/jnlp-slave with Jenkins docker-swarm-plugin (pass agent name)
我有一群三个节点(一个经理,两个工人)。在我的集群中,我正在 运行 使用 docker-swarm-plugin (https://github.com/jenkinsci/docker-swarm-plugin) installed. I want to use the plugin to create a build agent container in my swarm for every jenkins job. For the agents I want to user the jenkins/jnlp-slave docker image (https://hub.docker.com/r/jenkinsci/jnlp-slave/) 设置 jenkins 服务。该图像需要两个参数作为开始:
- 秘密(可以通过JENKINS_SECRET环境变量设置)
- 代理名称(可以通过JENKINS_AGENT_NAME环境变量设置)
docker-swarm-plugin 创建三个环境变量:
- $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_SECRET(我用这个来设密)
- $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JAR_URL
- $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JNLP_URL(包含代理名称)
我通过 JENKINS_SECRET 环境变量(在 Jenkins 插件配置的 ENV 部分)将秘密传递给代理:
JENKINS_SECRET=$DOCKER_SWARM_PLUGIN_JENKINS_AGENT_SECRET
我尝试使用正则表达式传递代理名称(也在 Jenkins 插件配置的 ENV 部分):
JENKINS_AGENT_NAME=`echo $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JNLP_URL | sed ...`
但是命令没有执行(我理解这是出于安全原因,避免代码注入)
我想达到什么目的:
我想 运行 jenkins 在我的 docker swarm 上,我希望 jenkins 运行 自己的构建代理容器中的每个作业在作业完成后被删除。我希望构建代理容器分布在 swarm 中(jenkins docker-plugin 在 jenkins master 运行ning 所在的节点上启动它们)。我知道 docker-swarm-plugin 应该做我想做的事情。我认为 jenkins/jnlp-slave 图像可以用来构建我想要使用的代理容器。但我找不到如何让他们一起工作的解决方案。
谁能给我一些建议?
我是否应该使用另一个与插件配合得更好的图像?
我打开了问题 https://github.com/jenkinsci/docker-swarm-plugin/issues/37 on docker-swarm-plugin for this and now with PR https://github.com/jenkinsci/docker-swarm-plugin/pull/39 添加了一个新的环境变量,其中包含创建的代理名称。这可以传递给 docker 图像,一切正常!
我有一群三个节点(一个经理,两个工人)。在我的集群中,我正在 运行 使用 docker-swarm-plugin (https://github.com/jenkinsci/docker-swarm-plugin) installed. I want to use the plugin to create a build agent container in my swarm for every jenkins job. For the agents I want to user the jenkins/jnlp-slave docker image (https://hub.docker.com/r/jenkinsci/jnlp-slave/) 设置 jenkins 服务。该图像需要两个参数作为开始:
- 秘密(可以通过JENKINS_SECRET环境变量设置)
- 代理名称(可以通过JENKINS_AGENT_NAME环境变量设置)
docker-swarm-plugin 创建三个环境变量:
- $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_SECRET(我用这个来设密)
- $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JAR_URL
- $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JNLP_URL(包含代理名称)
我通过 JENKINS_SECRET 环境变量(在 Jenkins 插件配置的 ENV 部分)将秘密传递给代理:
JENKINS_SECRET=$DOCKER_SWARM_PLUGIN_JENKINS_AGENT_SECRET
我尝试使用正则表达式传递代理名称(也在 Jenkins 插件配置的 ENV 部分):
JENKINS_AGENT_NAME=`echo $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JNLP_URL | sed ...`
但是命令没有执行(我理解这是出于安全原因,避免代码注入)
我想达到什么目的: 我想 运行 jenkins 在我的 docker swarm 上,我希望 jenkins 运行 自己的构建代理容器中的每个作业在作业完成后被删除。我希望构建代理容器分布在 swarm 中(jenkins docker-plugin 在 jenkins master 运行ning 所在的节点上启动它们)。我知道 docker-swarm-plugin 应该做我想做的事情。我认为 jenkins/jnlp-slave 图像可以用来构建我想要使用的代理容器。但我找不到如何让他们一起工作的解决方案。
谁能给我一些建议? 我是否应该使用另一个与插件配合得更好的图像?
我打开了问题 https://github.com/jenkinsci/docker-swarm-plugin/issues/37 on docker-swarm-plugin for this and now with PR https://github.com/jenkinsci/docker-swarm-plugin/pull/39 添加了一个新的环境变量,其中包含创建的代理名称。这可以传递给 docker 图像,一切正常!