1. 授权认证
  2. 获取用户个人信息
  3. 项目协同
  4. 代码托管
  5. 持续集成
  6. 制品仓库
  7. 测试管理
  1. 项目协同
  2. 代码仓库
  3. DevOps 实践之旅
  4. 一分钟开始持续集成之旅
  5. 持续部署
  6. 制品库

在持续集成中使用 SSH

功能介绍

在持续集成中执行构建时,您可能需要 SSH 登录到一个远端服务器以执行必要的脚本或者指令。CODING 持续集成当中已预装了 SSH 相关插件。

如何使用 SSH 相关指令

CODING 持续集成中内置了 SSH 相关指令,支持您通过 SSH 对远端机器进行操作。

  • sshCommand:在远端机器执行指定命令
  • sshPut:将当前工作空间的文件/目录放置到远端机器
  • sshGet:从远端机器获取文件/目录到当前工作空间
  • sshScript:读取本地 shell 脚本,在远端机器执行,而不是执行远端机器上的脚本,否则将会报错:「does not exists」。
  • sshRemove:将远端机器的某个文件/目录移除

如何通过账号 + 密码连接远端机器并执行 SSH 相关命令?Jenkinsfile 配置示例如下:

def remote = [:]
remote.name = "node"
remote.host = "node.abc.com"
remote.allowAnyHosts = true

node {
    withCredentials([usernamePassword(credentialsId: 'sshUserAcct', 
        passwordVariable: 'password', usernameVariable: 'userName')]) {
        remote.user = userName
        remote.password = password

        stage("SSH Steps Rocks!") {
            writeFile file: 'test.sh', text: 'ls'
            sshCommand remote: remote, 
                command: 'for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done'
            sshScript remote: remote, script: 'test.sh'
            sshPut remote: remote, from: 'test.sh', into: '.'
            sshGet remote: remote, from: 'test.sh', into: 'test_new.sh', override: true
            sshRemove remote: remote, path: 'test.sh'
        }
    }
}

如何使用 SSH 私钥连接到远端服务

除了上述示例通过账号 + 密码连接远端服务外 ,您还可以通过 SSH 私钥来连接到远端服务,Jenkinsfile 配置示例如下:

def remote = [:]
remote.name = "node"
remote.host = "node.abc.com"
remote.allowAnyHosts = true

node {
    withCredentials([sshUserPrivateKey(credentialsId: 'sshUser', keyFileVariable: 'identity')]) {
        // ssh 登陆用户名
        remote.user = 'root'
        // 私钥文件地址
        remote.identityFile = identity
        stage("SSH Steps Rocks!") {
            writeFile file: 'abc.sh', text: 'ls'
            sshCommand remote: remote, 
                command: 'for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done'
            sshPut remote: remote, from: 'abc.sh', into: '.'
            sshGet remote: remote, from: 'abc.sh', into: 'bac.sh', override: true
            sshScript remote: remote, script: 'abc.sh'
            sshRemove remote: remote, path: 'abc.sh'
        }
    }
}

拓展阅读

  • 想要查看一个通过 SSH 登录远程 Linux Docker 服务器并将镜像部署上去的配置,您可以查看帮助文档《持续集成的自动化部署》

  • 想要了解更多 Jenkinsfile 中关于 SSH 命令的内容,您可以查看 Jenkins 帮助文档 SSH Pipeline Steps

  • 想要了解更多 Jenkins 的 SSH 插件相关内容,您可以查看该插件的官方主页 ssh-steps-plugin

上一篇保存 Dockerfile 镜像用于下次集成
最近更新
感谢反馈有用
感谢反馈没用