如何使用Jenkins docker-swarm-plugin(传递代理名称)使用docker image jenkins / jnlp-slave

时间:2019-08-06 13:20:47

标签: docker jenkins jenkins-plugins docker-swarm docker-swarm-mode

我有三个节点(一个经理,两个工人)。在我的团队中,我正在运行安装了docker-swarm-plugin(https://github.com/jenkinsci/docker-swarm-plugin)的jenkins服务。我想使用该插件在我的团队中为每个詹金斯工作创建一个构建代理容器。对于代理,我想使用jenkins / jnlp-slave码头工人镜像(https://hub.docker.com/r/jenkinsci/jnlp-slave/)。该图像的开头需要两个参数:

  1. 秘密(可以通过JENKINS_SECRET环境变量设置)
  2. 代理名称(可以通过JENKINS_AGENT_NAME环境变量设置)

docker-swarm-plugin创建三个环境变量:

  1. $ DOCKER_SWARM_PLUGIN_JENKINS_AGENT_SECRET(我用来设置机密)
  2. $ DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JAR_URL
  3. $ 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 ...`

但是该命令未执行(我了解这是出于安全原因,以避免代码注入)。

我想达到什么目标: 我想在我的docker群上运行jenkins,并且我希望jenkins在自己的构建代理容器中运行每个作业,该容器在作业完成后会被删除。而且我希望构建代理容器分布在整个集群中(jenkins docker-plugin在运行jenkins master的节点上启动它们)。我知道docker-swarm-plugin应该完全按照我的意愿去做。而且我认为jenkins / jnlp-slave映像可以在其中构建我想使用的代理容器。但我找不到如何使它们协同工作的解决方案。

有人可以给我一些建议吗? 我是否应该使用其他与插件效果更好的图像?

1 个答案:

答案 0 :(得分:1)

为此,我在docker-swarm-plugin上打开了问题https://github.com/jenkinsci/docker-swarm-plugin/issues/37,现在使用PR https://github.com/jenkinsci/docker-swarm-plugin/pull/39添加了一个新的环境变量,并带有创建的代理名称。可以将其传递给docker映像,一切正常!