簡體   English   中英

如何將文件從SSH遠程主機復制到Jenkins服務器

[英]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 = nullsshHost = null很多麻煩:)

因為我花了很長時間才發現我想為下一個人分享這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM