You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins 2.414.1:动态创建执行节点或复用节点指定凭证的咨询

针对Jenkins远程Linux节点执行流水线的解决方案

你的需求完全可以实现,下面分两种场景给出具体配置方式:

一、动态创建Jenkins执行节点(按需启停)

通过Jenkins官方的SSH Build Agents插件,就能在流水线中动态注册远程Linux节点,用完可自动销毁,非常适合临时任务场景:

  1. 前置准备:

    • 在Jenkins插件管理中安装SSH Build Agents插件(Jenkins 2.414.1完全兼容)。
    • 在Jenkins凭证管理中添加目标LDAP用户的SSH凭证:可以是“用户名+密码”或者“用户名+私钥”类型,记录好凭证ID。
    • 确保远程Linux主机开启SSH服务,Jenkins主节点能访问该主机的22端口,且目标用户对指定工作目录有读写权限。
  2. 流水线示例代码:

pipeline {
    agent none
    stages {
        stage('动态节点执行任务') {
            agent {
                sshConnector(
                    remoteHost: '远程Linux主机IP/域名',
                    credentialsId: '你的用户级凭证ID',
                    sshHostKeyVerificationStrategy: 'nonVerifyingKeyVerificationStrategy', // 测试环境可用,生产建议用已知主机策略
                    remoteFS: '/home/目标用户/jenkins_workspace',
                    label: 'temp-linux-slave'
                )
            }
            steps {
                script {
                    // 验证当前执行用户
                    sh 'whoami'
                    // 这里替换成你的实际任务命令
                    sh 'echo 正在远程节点执行任务...'
                }
            }
        }
    }
    post {
        always {
            // 任务结束后销毁动态节点,避免资源浪费
            script {
                def targetNode = Jenkins.instance.nodes.find { it.name == 'temp-linux-slave' }
                if (targetNode) {
                    Jenkins.instance.removeNode(targetNode)
                }
            }
        }
    }
}

二、复用预定义节点并指定用户级凭证

如果已经在Jenkins中配置了永久的远程Linux节点,有两种方式指定用户身份执行任务:

方式1:预定义节点直接绑定用户凭证

编辑预定义节点的配置:

  • 进入「Jenkins管理」→「节点」→ 选择目标节点→「配置」
  • 在「启动方法」中选择「通过SSH启动代理」,然后在「凭证」下拉框中选择你提前配置的用户级LDAP凭证
  • 保存配置后,该节点会以指定用户身份连接远程Linux主机,流水线只需指定节点标签即可:
pipeline {
    agent { label 'predefined-linux-slave' } // 预定义节点的标签
    stages {
        stage('预定义节点执行任务') {
            steps {
                sh 'whoami' // 输出的就是你指定的LDAP用户
                sh '执行你的流水线任务命令'
            }
        }
    }
}

方式2:流水线中临时切换用户

如果预定义节点默认用其他用户连接,可在流水线中通过凭证切换用户执行:

pipeline {
    agent { label 'predefined-linux-slave' }
    stages {
        stage('切换用户执行任务') {
            steps {
                withCredentials([sshUserPrivateKey(
                    credentialsId: '你的用户级凭证ID',
                    usernameVariable: 'TARGET_USER'
                )]) {
                    // 通过su切换用户执行命令
                    sh "su - ${TARGET_USER} -c 'whoami && 你的任务命令'"
                    // 或者用sudo(如果目标用户有sudo权限)
                    // sh "sudo -u ${TARGET_USER} whoami"
                }
            }
        }
    }
}

关键注意事项

  • 无论哪种方案,目标LDAP用户必须拥有远程Linux主机的SSH访问权限,且对工作目录有读写权限。
  • 生产环境中建议启用SSH主机密钥验证策略,不要用nonVerifyingKeyVerificationStrategy,避免安全风险。
  • 确保Jenkins主节点和远程Linux主机网络连通,无防火墙或安全组限制。

内容的提问来源于stack exchange,提问作者freeAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:16:31