Docker Helm中Kubernetes上的Jenkins-如何将ssh密钥附加到代理

Docker Helm中Kubernetes上的Jenkins-如何将ssh密钥附加到代理,docker,jenkins,kubernetes,Docker,Jenkins,Kubernetes,我使用的是来自stable/Jenkinshelm chart的Jenkins-一切都很好我用id_rsa/.pub key作为卷向Jenkins master附加了机密(比如在/opt/sshkeys/中,为什么会有?因为创建的文件是一个具有777权限的软链接,所以不能直接转到$HOME/.ssh) 然后运行几个脚本(cp,chmod)将它们作为适当的文件移动到/home/jenkins/.ssh/id\u rsa-jenkins代理的问题是-由于777原因,我不能像上面描述的那样简单地附加卷

我使用的是来自
stable/Jenkins
helm chart的Jenkins-一切都很好我用id_rsa/.pub key作为卷向Jenkins master附加了机密(比如在
/opt/sshkeys/
中,为什么会有?因为创建的文件是一个具有777权限的软链接,所以不能直接转到
$HOME/.ssh

然后运行几个脚本(cp,chmod)将它们作为适当的文件移动到
/home/jenkins/.ssh/id\u rsa
-jenkins代理的问题是-由于777原因,我不能像上面描述的那样简单地附加卷,并且我不能在代理上使用任何命令,因为主入口点命令是使其成为代理的命令

command:
args: "${computer.jnlpmac} ${computer.name}"
  • 尝试执行
    mkdir/home/jenkins/.ssh&&chmod…&&(ctrl+f
    用例:带有ssh键的Pod
    ),但我在777中遇到了上述问题


    PS:为了查看部署和值文件的外观,并测试您是否可以安装helm3和
    helm3 show values stable/jenkins>jenkins.yaml

    如注释中提到的@potatopato,他通过创建一个并将其作为卷附加到代理,并手动将密钥放在那里,解决了这个问题


    我建议检查这个媒体,因为它很好地描述了应该如何做,本文中提到的所有资源都可以在这个git中找到

    此git存储库包含通过演示运行部署所需的文件

    • 詹金斯大师
    • 具有持久卷的Jenkins代理

    更准确地检查这部分

    主机和代理之间的通信 詹金斯大师和代理可以通过多种方式相互连接。我们将使用SSH凭据通过SSH从Jenkins主机启动此连接这种方法要求我们将ssh从属插件安装到主机,将ssh凭据装载到主机和代理中,并将代理基于ssh从属映像。

    此外,Jenkins主机需要通过唯一的静态主机名连接到每个代理,这是通过使用StatefulSet部署代理得到的

    代理的初始化 Jenkins master不会连接到基于ssh的代理,除非配置为这样做。我们可以通过给每个代理pod一个Init容器来引导这个配置,该容器负责配置Jenkins master。当代理启动时,Jenkins master已经在尝试连接了

    Init容器将需要完成以下操作:

    • 从master下载Jenkins CLI
    • 使用CLI检查主机是否已配置为使用此命令 代理人
    • 如果需要,请使用CLI配置master以使用此代理
    这需要在我们的代理吊舱内进行一些配置:

    • fsGroup设置为“jenkins”用户组。这是必要的,因为 默认情况下,永久卷作为根用户装载,使其 “jenkins”用户无法使用
    • Init容器中的环境变量:JENKINS_URL:http Jenkins master Jenkins_标签地址:我们代理的标签
    • 主容器中的环境变量: JENKINS_SLAVE_SSH_PUBKEY:验证连接的公钥 尝试

    我想这个媒体可以回答你的问题。您能检查一下并告诉我它是否解决了您的问题吗?我通过创建nfs服务器并将其作为卷附加到代理并手动将密钥放在那里解决了这个问题
    command:
    args: "${computer.jnlpmac} ${computer.name}"
    
    Constraints
    Multiple containers can be defined in a pod. One of them is automatically created with name
    jnlp, and runs the Jenkins JNLP agent service, with args ${computer.jnlpmac} ${computer.name},
    and will be the container acting as Jenkins agent.
    
    Other containers must run a long running process, so the container does not exit. If the default 
    entrypoint or command just runs something and exit then it should be overridden with something
    like cat with ttyEnabled: true.
    
    WARNING If you want to provide your own Docker image for the JNLP slave, you must name the
    container jnlp so it overrides the default one. Failing to do so will result in two slaves 
    trying to concurrently connect to the master.