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

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

我有一组三个节点(一个经理,两个 worker )。在我的 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/ )。图像需要两个参数作为开始:

  • secret (可以通过 JENKINS_SECRET 环境变量设置)
  • 代理名称(可以通过 JENKINS_AGENT_NAME 环境变量设置)

  • docker-swarm-plugin 创建三个环境变量:
  • $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_SECRET(我用它来设置 secret )
  • $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JAR_URL
  • $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JNLP_URL(包含代理名称)

  • 我通过 JENKINS_SECRET 环境变量(在 Jenkins 插件配置的 ENV 部分)将 secret 传递给代理:
    JENKINS_SECRET=$DOCKER_SWARM_PLUGIN_JENKINS_AGENT_SECRET
    

    我尝试使用正则表达式(也在 Jenkins 插件配置的 ENV 部分)传递代理名称:
    JENKINS_AGENT_NAME=`echo $DOCKER_SWARM_PLUGIN_JENKINS_AGENT_JNLP_URL | sed ...`
    

    但是该命令没有执行(我理解这是出于安全原因以避免代码注入(inject))。

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

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

    最佳答案

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

    关于docker - 如何使用 Jenkins docker-swarm-plugin 使用 docker image jenkins/jnlp-slave(传递代理名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57377058/

    相关文章:

    java - 在 Jenkins 中使用 OpenJDK 14

    jenkins - 在 Jenkins 升级构建中使用凭据

    postgresql - 无法访问在 docker 入口点文件中创建的 postgres 扩展,直到我在 psql 中手动创建它

    java - Docker-compose - 为运行 spring boot 独立应用程序的 docker 容器提供基于 XML 的配置

    node.js - 源代码控制 (git) docker-compose.yml

    java - def fileName = new File(directoryName +"XYZ.md") 不适用于云环境

    Jenkins HttpRequest 插件 MissingMethodException

    docker - Windows 容器导致 Azure SQL 连接失败

    Jenkins - Next Execution 插件 - 如何通过 REST API 获取详细信息

    java - 开发和生产测试时的不同 URL