本文插件介绍,插件安装和插件使用章节中大多数内容参考转自: Jenkins常用插件Publish Over SSH

插件介绍

可以实现不同节点之间传递文件,比如A节点将代码编译打包好,然后通过ssh发送到目标节点上,配置相应的命令完成项目的部署,目标节点无需是是一个slave,只要A节点能够通过ssh连接到B节点即可。

插件安装

插件市场搜索Publish Over SSH,然后安装它

publish_over_ssh_plugin.png

插件主页:https://plugins.jenkins.io/publish-over-ssh

插件使用

配置远程主机

  1. 依次点击-“系统管理(Manage Jenkins)”-“系统配置(Configure System)”,找到”Publish over SSH”;
  2. 在”Passphrase”输入框中填写通用密码,也可以指定私钥路径,私钥可以使用路径也可以直接粘贴key的内容;
  3. 在”SSH Servers”处点击”新增按钮(Add)”,新增一个远程主机;
  4. 在”Name”输入框中填写这个远程主机的名称;
  5. 在”Hostname”输入框中填写IP地址,或者节点能够解析的主机名称;
  6. 在”Username”输入框中填写用于远程登录的用户名;
  7. 在”Remote Directory”输入框中填写远程主机存放文件的目录,这个目录必须已存在;
  8. 如果当前的远程主机密码不是第二步配置的通用密码,可以点击右下角的”高级”,在Password输入框中填写这个远程主机的密码;
  9. 点击”Test Configuration”测试配置,如果报错,根据错误提示进行相应的更改。

publish_over_ssh_ssh_server_setting

Job配置

“Publish Over SSH”在Job中两个地方可以使用。

  • “构建(Build)”中“添加构建步骤(Add build step)”中的“Send files or execute commands over SSH”

  • “构建后操作(Post-build Actions)”中“添加构建后操作(Add post-build action)”中的“Send build artifacts over SSH”

    publish_over_ssh_build_step_vs_post_build_action

Action设置:

  1. 在Job中新增一个”构建后操作”,选择”Send build artifacts over SSH”
  2. 在”SSH Server”-“Name”中选择刚才我们配置的远程主机
  3. 在”Source files”中填写源文件,相对路径,基于JOB目录。我们的文件路径为${WORKSPACE}/{JOB}/target/dist.zip,这里填写target/*.zip用于匹配target目录下的所有以zip结尾的文件
  4. 在”Remove prefix”中填写需要删除的路径前缀,如果不填写,那么复制到远程主机的结构为target/dist.zip,我们不需要target这个目录,所以这里填写”target”。
  5. 在”Remote directory”中填写远程目录路径,这个路径是基于在配置远程主机时填写的路径,前面我们填写的路径为/opt/jenkins,这里填写target,组合起来就是/opt/jenkins/target目录
  6. 在”Exec command”中填写复制完成后需要在目标主机中执行的命令,如果命令过多,可以写一个脚本,在这里调用它

publish_over_ssh_post_build_action_add_action.png

插件使用小坑

Macos下生成ssh key问题

Macos下ssh-keygen命令不加参数默认生成的private key用于添加ssh server的key时,会报类似如下的错误

1
2
3
Failed to connect or change directory
jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@3085b39b]"

这是因为MacOS的ssh-keygen生成key的机制更新,使用ssh-keygen -f ./xxxx默认生成的私钥的开头是-----BEGIN OPENSSH PRIVATE KEY-----, 无法被publish over ssh插件所识别。添加-m PEM参数后生成的私钥就可以被识别。

1
ssh-keygen -t rsa -b 4096 -m PEM

参考:

打印远程机器上的日志

默认情况下,publish over ssh插件不会打印在远端机器上的日志。初始debug发布命令的时候会很不方便, 插件提供了开启关闭远端日志的开关。

方法是在Action中的SSH Server下点开Advanced...,勾选Verbose output in console

publish_over_ssh_verbose_output_log

Reference

留言