[英]How to read a .json file from a remote server SSH with a shell script
[英]How to copy file from SSH remote host to Jenkins Server
我們使用Jenkins服務器進行日常構建過程,並通過SSH在遠程主機上執行一些bash腳本。 此腳本在遠程主機上生成html日志文件。
我們使用Copy to slave插件來復制從機上的文件,並通過ssh插件發布來管理構建過程中的SSH會話。
現在問題是,我們想要將一些文件(Scripts的日志文件)從遠程ssh主機復制到Jenkins Server。 哪個是可能的,更好的選擇相同(插件會更好,如果有的話)。
編輯:
sshpass是一個選項,但尋找任何插件或更好的方式來完成這項工作。
使用sshpass
命令發送文件
構建環境 - >使用ssh - > Post構建腳本在遠程主機上執行Shell腳本
示例命令:
sshpass -p "password" scp path/of/file <new_server_ip>:/path/of/file
這將跳過密碼提示scp
命令,並提供密碼scp
。
我認為你可以生成ssh keypair並將其作為參數傳遞給slave,例如, Config File Provider Plugin
然后使用scp使用此密鑰對檢索文件以進行身份驗證過程。
顯然為時已晚,但如果您已經在使用publish-over-ssh
,想要避免重復憑據並擁有共享庫,您可以使用這塊groovy來獲取主機配置:
import jenkins.plugins.publish_over_ssh.*
@NonCPS
def getSSHHost(name) {
def found = null
Jenkins.instance.getDescriptorByType(BapSshPublisherPlugin.Descriptor.class).each{
it.hostConfigurations.each{host ->
if (host.name == name) {
found = host
}
}
}
found
}
如上所述,這需要一個全局共享庫(以便您的代碼可信)或(可能)許多管理員批准,對不起。
這將返回BapSshHostConfiguration 。
對於密碼連接,您可以:
def sshHost = getSSHHost('Configuration Name')
def host = [host: sshHost.hostname, user: sshHost.username, password: sshHost.password]
sshHost = null
sh("""
set +x
sshpass -p "${host.password}" scp -o StrictHostKeyChecking=no ${host.user}@${host.host}:filename.extension .
set -x
""")
這會將文件復制到本地工作目錄。 可能不是最好的代碼,但我不是一個時髦的專家。 它的工作原理對我來說已經足夠了。 ( set +x
是為了避免它回顯日志中的命令,顯示密碼)。 在執行CPS調用之前擺脫任何非CPS( sshHost = null
) sshHost = null
很多麻煩:)
因為我花了很長時間才發現我想為下一個人分享這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.