ssh-steps-plugin

ssh-steps-plugin

SSH 操作步骤插件,简化 Jenkins Pipeline 远程任务

ssh-steps-plugin 为 Jenkins Pipeline 提供 SSH 操作功能,支持远程命令执行、脚本运行和文件传输。该插件简化了 CI/CD 流程中的远程服务器操作,支持灵活配置并与 Jenkins 凭证系统集成。基于 Groovy SSH 库开发,ssh-steps-plugin 通过易用的 Pipeline 步骤增强了 Jenkins 的远程任务处理能力。

JenkinsSSHpipeline插件远程操作Github开源项目

= SSH Pipeline Steps :toc: macro :note-caption: :information_source: :tip-caption: :bulb:

image::docs/static/images/JenkinsPlusSSH.png[Jenkins,300]

link:https://ci.jenkins.io/job/Plugins/job/ssh-steps-plugin/job/master/[image:https://ci.jenkins.io/job/Plugins/job/ssh-steps-plugin/job/master/badge/icon[Build]] image:https://img.shields.io/badge/License-Apache%202.0-blue.svg[License] link:https://plugins.jenkins.io/ssh-steps[image:https://img.shields.io/badge/SSH%20Steps-WIKI-blue.svg[Wiki]] image:https://badges.gitter.im/jenkinsci/ssh-steps-plugin.svg[link="https://gitter.im/jenkinsci/ssh-steps-plugin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"]

Jenkins pipeline steps which provides SSH facilities such as command execution or file transfer for continuous delivery. It internally uses the library of https://github.com/int128/groovy-ssh[Groovy SSH].

Read more about the YAML extension of this plugin at https://engineering.cerner.com/blog/ssh-steps-for-jenkins-pipeline/[this blog post]

''' toc::[]

== Configuration === Remote

Most of the steps in this plugin require a common step variable called remote, which is Map of remote node settings such as user name, password and so on. Here is list of all possible keys that can be set.

[%header,cols=3*] |=== |Key |Type |Description

|name |String, Mandatory |Remote name, usually this is same as host name.

|host |String, Mandatory |Hostname or IP address of the remote host.

|port |int |Port. Defaults to port 22.

|user |String, Mandatory |User name.

|allowAnyHosts |boolean |If this is true, knownHosts is optional. Defaults to false.

|knownHosts |String, Mandatory |Known hosts file for host key checking.

|password |String, one of password, identity or identityFile is required |Password for password authentication.

|identity |String, one of password, identity or identityFile is required |Private key for public-key authentication.

|identityFile |String, one of password, identity or identityFile is required |Private key file name for public-key authentication.

|passphrase |String |Pass-phrase for the private key.

|agent |boolean |If this is true, Putty Agent or ssh-agent is used on authentication. Defaults to false.

|timeoutSec |int |Connection timeout and socket read timeout. Defaults to 0 (OS default).

|retryCount |int |Retry count to establish connection. Defaults to 0 (no retry).

|retryWaitSec |int |Interval time between each retries. Defaults to 0 (immediately).

|keepAliveSec |int |Interval time of keep alive messages sent to the remote host. Defaults to 60 seconds.

|agentForwarding |boolean |If this is true, the agent forwarding is requested on the command execution. Defaults to false.

|fileTransfer |String |File transfer method, that is sftp or scp. Defaults to sftp.

|encoding |String |Encoding of input and output on the command or shell execution. Defaults to UTF-8.

|proxy |Proxy, refer below. |If this is set, the proxy server is used to reach the remote host. Defaults to no proxy.

|gateway |Remote |Gateway remote host. If this is set, the port-forwarding tunnel is used to reach the remote host. Defaults to no gateway.

|appendName |boolean |If this is true, name is prefixed to each line in the log output. New format: name\|log.

|logLevel |String a|Defaults to SEVERE

Possible values, refer to java logging https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html[levels]

  • SEVERE (highest value)
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST (lowest value)

|pty |boolean |If this is true, a PTY (pseudo-terminal) is allocated on the command execution. Defaults to false. |===

=== Proxy

[%header,cols=3*] |=== |Key |Type |Description

|name |String, Mandatory |Proxy name

|host |String, Mandatory |Hostname or IP address of the proxy server.

|port |int, Mandatory |Port of the proxy server.

|type |String, Mandatory |Type of the proxy server: SOCKS or HTTP.

|user |String |User name of the proxy server.

|password |String |Password of the proxy server.

|socksVersion |int |Protocol version when using SOCKS: 4 or 5. Defaults to 5. |===

== Pipeline Steps

The following pipeline steps are available with the initial version of this plugin.

=== sshCommand

This step executes given command on remote node and responds with output.

==== Input

[%header,cols=3*] |=== |Key |Type |Description

|remote |Remote, Mandatory, Refer to the Remote config for more details. |Host config to run the command on.

|command |String, Mandatory |Shell command to run. Appending sudo is optional when sudo is true.

|sudo |boolean, default: false. |Interactively supplies the password, not required for password less sudo commands. + + sshCommand with sudo:true param also requires pty:true on remote config with this upgrade. (This is only applicable for few platforms like Linux so apply this accordingly.)

|failOnError |boolean, default: true. |If this is false, no job failure would occur though there is an error while running the command.

|dryRun |boolean, default: false |If this is true, no actual connection or operation is performed. |===

==== Example

node { def remote = [:] remote.name = 'test' remote.host = 'test.domain.com' remote.user = 'root' remote.password = 'password' remote.allowAnyHosts = true stage('Remote SSH') { sshCommand remote: remote, command: "ls -lrt" sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done" } }

=== sshScript

This step executes given script(file) on remote node and responds with output.

==== Input

[%header,cols=3*] |=== |Key |Type |Description

|remote |Remote, Mandatory, Refer to the Remote config for more details. |Host config to run the command on.

|script |String, Mandatory |Script file name from the workspace, current this doesn't support script with arguments. For that option you would need to copy over the file to remote node and run it as a command.

|failOnError |boolean, default: true. |If this is false, no job failure would occur though there is an error while running the command.

|dryRun |boolean, default: false |If this is true, no actual connection or operation is performed. |===

==== Example

node { def remote = [:] remote.name = 'test' remote.host = 'test.domain.com' remote.user = 'root' remote.password = 'password' remote.allowAnyHosts = true stage('Remote SSH') { writeFile file: 'abc.sh', text: 'ls -lrt' sshScript remote: remote, script: "abc.sh" } }

=== sshPut

Put a file or directory into the remote host.

==== Input

[%header,cols=3*] |=== |Key |Type |Description

|remote |Remote, Mandatory, Refer to the Remote config for more details. |Host config to run the command on.

|from |String, Mandatory |file or directory path from the workspace.

|into |String, Mandatory |file or directory path on the remote node.

|filterBy |String, Optional, Defaults to name. |Put files by a file filter. Possible values are params on the java File object.

|filterRegex |String, Optional. |Put files by a file regex (Groovy syntax). Example: /.xml$/ - Puts all xml files.

|failOnError |boolean, default: true. |If this is false, no job failure would occur though there is an error while running the command.

|dryRun |boolean, default: false |If this is true, no actual connection or operation is performed. |===

==== Example

node { def remote = [:] remote.name = 'test' remote.host = 'test.domain.com' remote.user = 'root' remote.password = 'password' remote.allowAnyHosts = true stage('Remote SSH') { writeFile file: 'abc.sh', text: 'ls -lrt' sshPut remote: remote, from: 'abc.sh', into: '.' } }

=== sshGet

Get a file or directory from the remote host.

==== Input

[%header,cols=3*] |=== |Key |Type |Description

|remote |Remote, Mandatory, Refer to the Remote config for more details. |Host config to run the command on.

|from |String, Mandatory |file or directory path from the remote node.

|into |String, Mandatory |file or directory path on current workspace.

|filterBy |String, Optional, Defaults to name. |Get files by a file filter. Possible values are params on the java File object.

|filterRegex |String, Optional. |Get files by a file regex (Groovy syntax). Example: /.xml$/ - Gets all xml files.

|failOnError |boolean, default: true. |If this is false, no job failure would occur though there is an error while running the command.

|dryRun |boolean, default: false |If this is true, no actual connection or operation is performed. |===

==== Example

node { def remote = [:] remote.name = 'test' remote.host = 'test.domain.com' remote.fileTransfer = 'scp' remote.user = 'root' remote.password = 'password' remote.allowAnyHosts = true stage('Remote SSH') { sshGet remote: remote, from: 'abc.sh', into: 'abc_get.sh', override: true } stage('Retrieve files with regex') { def regexPattern = ".+\\.(log|csv)\$" sshGet remote: remote, from: '/home/jenkins/', filterRegex: regexPattern, into: 'tests/', override: true } }

=== sshRemove

Remove a file or directory on the remote host.

==== Input

[%header,cols=3*] |=== |Key |Type |Description

|remote |Remote, Mandatory, Refer to the Remote config for more details. |Host config to run the command on.

|path |String, Mandatory |file or directory path on the remote node

|failOnError |boolean, default: true. |If this is false, no job failure would occur though there is an error while running the command.

|dryRun |boolean, default: false |If this is true, no actual connection or operation is performed. |===

==== Example

node { def remote = [:] remote.name = 'test' remote.host = 'test.domain.com' remote.user = 'root' remote.password = 'password' remote.allowAnyHosts = true stage('Remote SSH') { sshRemove remote: remote, path: "abc.sh" } }

== Examples

=== withCredentials

An example how these steps can leverage withCredentials to read private key from Jenkins credentials store.

def remote = [:] remote.name = "node-1" remote.host = "10.000.000.153" remote.allowAnyHosts = true node { withCredentials([sshUserPrivateKey(credentialsId: 'sshUser', keyFileVariable: 'identity', passphraseVariable: '', usernameVariable: 'userName')]) { remote.user = userName 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' } } }

==== Classic View: image::docs/static/images/ExampleWithCredentials.png[ExampleWithCredentials,900]

==== Blue Ocean View: image::docs/static/images/ExampleWithCredentialsBlueOcean.png[ExampleWithCredentialsBlueOcean,900]

== link:CONTRIBUTING.adoc[Contributing Guide]

== link:CHANGELOG.adoc[Changelog]

== Maintainers

== Disclaimer

Please don't hesitate to log a http://issues.jenkins-ci.org/[JIRA] or github pull request if you need any help or if you can be of help with this plugin :). Refer to the link:./CONTRIBUTING.adoc[contribution guide] for more information.

== License

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the

编辑推荐精选

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具使用教程AI营销产品酷表ChatExcelAI智能客服
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

数据安全AI助手热门AI工具AI辅助写作AI论文工具论文写作智能生成大纲
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

热门AI工具AI办公办公工具智能排版AI生成PPT博思AIPPT海量精品模板AI创作
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
下拉加载更多