繁体   English   中英

如何使用 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)

我有一群三个节点(一个经理,两个工人)。 在我的 swarm 中,我正在运行一个安装了 docker-swarm-plugin ( https://github.com/jenkinsci/docker-swarm-plugin ) 的 jenkins 服务。 我想使用该插件在我的 swarm 中为每个 jenkins 工作创建一个构建代理容器。 对于代理,我想使用 jenkins/jnlp-slave docker 映像 ( 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 swarm 上运行 jenkins,我希望 jenkins 在自己的构建代理容器中运行每个作业,该容器在作业完成后被删除。 我希望构建代理容器在整个集群中传播(jenkins docker-plugin 在 jenkins master 运行的节点上启动它们)。 我明白 docker-swarm-plugin 应该做我想做的。 我认为 jenkins/jnlp-slave 映像可以用来构建我想要使用的代理容器。 但我找不到如何让它们一起工作的解决方案。

谁能给我一些建议? 我应该使用另一个与插件配合得更好的图像吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM