SSH 命令行 (Jenkins 原生)
持续集成中的 SSH 命令行插件通常用于授权构建机登录云服务器执行相应的命令与任务。通过 SSH 命令行插件,构建机可以针对云服务器执行以下操作:
将构建机上的文件推送到云主机;
将云主机上的文件拉取至构建机上;
远程登录云主机上执行命令;
将构建机上的脚本传输至云主机并执行;
远程登录云主机后删除文件;
参考构建计划模板
账号密码凭据 SSH Jenkinsfile 示例
pipeline {agent anystages {stage('阶段-1') {steps {checkout([$class: 'GitSCM',branches: [[name: env.GIT_BUILD_REF]],userRemoteConfigs: [[url: env.GIT_REPO_URL,credentialsId: env.CREDENTIALS_ID]]])}}stage("阶段名称") {steps {withCredentials([usernamePassword(credentialsId: "${REMOTE_CRED}",passwordVariable: 'password',usernameVariable: 'userName')]) {script {remoteConfig = [:]remoteConfig.name = "my-remote-server"remoteConfig.host = "${REMOTE_HOST}"remoteConfig.allowAnyHosts = trueremoteConfig.user = userName// SSH 登录密码remoteConfig.password = passwordwriteFile(file: 'test.sh', text: 'ls')sshCommand(remote: remoteConfig, command: 'for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done')sshScript(remote: remoteConfig, script: 'test.sh')sshPut(remote: remoteConfig, from: 'test.sh', into: '.')sshGet(remote: remoteConfig, from: 'test.sh', into: 'test_new.sh', override: true)sshRemove(remote: remoteConfig, path: 'test.sh')}} }}}
}
私钥凭据 SSH Jenkinsfile 示例
pipeline {agent anystages {stage('阶段-1') {steps {checkout([$class: 'GitSCM',branches: [[name: env.GIT_BUILD_REF]],userRemoteConfigs: [[url: env.GIT_REPO_URL,credentialsId: env.CREDENTIALS_ID]]])}}stage("阶段名称") {steps {// 使用当前项目下的凭据管理中的 SSH 私钥 凭据withCredentials([sshUserPrivateKey(credentialsId: "${REMOTE_CRED}",keyFileVariable: "privateKeyFilePath")]) {script {remoteConfig = [:]remoteConfig.name = "my-remote-server"remoteConfig.host = "${REMOTE_HOST}"remoteConfig.allowAnyHosts = trueremoteConfig.user = userName// SSH 私钥文件地址remoteConfig.identityFile = privateKeyFilePathwriteFile(file: 'test.sh', text: 'ls')sshCommand(remote: remoteConfig, command: 'for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done')sshScript(remote: remoteConfig, script: 'test.sh')sshPut(remote: remoteConfig, from: 'test.sh', into: '.')sshGet(remote: remoteConfig, from: 'test.sh', into: 'test_new.sh', override: true)sshRemove(remote: remoteConfig, path: 'test.sh')}} }}}
}